home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newtwo.s < prev    next >
Text File  |  1997-01-31  |  147KB  |  10,149 lines

  1.  
  2. CD32VER equ 0
  3.  
  4. maxscrdiv EQU 8
  5. max3ddiv EQU 5
  6. playerheight EQU 12*1024
  7. playercrouched EQU 8*1024
  8. scrheight EQU 80
  9.  
  10. ; k/j/m
  11.  
  12. ; 4/8
  13. ; s/x
  14. ; b/n
  15.  
  16. midoffset EQU 104*4*40
  17.  
  18.  
  19.  SECTION Scrn,CODE
  20. OpenLib         equ -552
  21. CloseLib        equ -414
  22.  
  23. INTREQ    equ    $09C
  24. INTENA    equ    $09A
  25. INTENAR    equ    $01C
  26. DMACON    equ    $096
  27.  
  28. SERPER    equ    $032
  29. SERDATR    equ    $018
  30. SERDAT    equ    $030
  31. vhposr        equ $006    
  32. vhposrl        equ $007 
  33.  
  34. bltcon0        equ $40 
  35. bltcon1        equ $42
  36. bltcpt        equ $48
  37. bltbpt        equ $4c
  38. bltapt        equ $50
  39. spr0ctl        equ $142
  40. spr1ctl        equ $14a
  41. spr2ctl        equ $152
  42. spr3ctl        equ $15a
  43. spr4ctl        equ $162
  44. spr5ctl        equ $16a
  45. spr6ctl        equ $172
  46. spr7ctl        equ $17a
  47. spr0pos        equ $140
  48. spr1pos        equ $148
  49. spr2pos        equ $150
  50. spr3pos        equ $158
  51. spr4pos        equ $160
  52. spr5pos        equ $168
  53. spr6pos        equ $170
  54. spr7pos        equ $178
  55. bltdpt         equ $54
  56. bltafwm        equ $44
  57. bltalwm        equ $46
  58. bltsize         equ $58
  59. bltcmod         equ $60
  60. bltbmod         equ $62
  61. bltamod         equ $64
  62. bltdmod         equ $66
  63. diwstart        equ $8e         ; Screen hardware registers.
  64. diwstop         equ $90
  65. ddfstart        equ $92
  66. ddfstop         equ $94
  67. bplcon0         equ $100
  68. bplcon1         equ $102
  69. col0            equ $180
  70. col1            equ $182
  71. col2        equ $184
  72. col3        equ $186
  73. col4        equ $188
  74. col5        equ $18a
  75. col6        equ $18c
  76. col7        equ $18e
  77. col8            equ $190
  78. col9            equ $192
  79. col10           equ $194
  80. col11           equ $196
  81. col12           equ $198
  82. col13           equ $19a
  83. dmacon        equ $96
  84. dmaconr        equ $002
  85. intenar        equ $01c
  86. intena        equ $09a
  87. intreq        equ $09c
  88. intreqr        equ $01e
  89. intreqrl    equ $01f
  90. bpl1pth         equ $e0
  91. bpl1ptl         equ $e2
  92. bpl2pth        equ $e4
  93. bpl2ptl        equ $e6
  94. bpl3pth        equ $e8
  95. bpl3ptl        equ $ea
  96. bpl4pth        equ $ec
  97. bpl4ptl        equ $ee
  98. bpl5pth        equ $f0
  99. bpl5ptl        equ $f2
  100. bpl6pth        equ $f4
  101. bpl6ptl        equ $f6
  102. bpl7pth        equ $f8
  103. bpl7ptl        equ $fa
  104. bpl8pth        equ $fc
  105. bpl8ptl        equ $fe
  106. spr0pth        equ $120
  107. spr0ptl        equ $122
  108. spr1pth        equ $124
  109. spr1ptl        equ $126
  110. spr2pth        equ $128
  111. spr2ptl        equ $12a
  112. spr3pth        equ $12c
  113. spr3ptl        equ $12e
  114. spr4pth        equ $130
  115. spr4ptl        equ $132
  116. spr5pth        equ $134
  117. spr5ptl        equ $136
  118. spr6pth        equ $138
  119. spr6ptl        equ $13a
  120. spr7pth        equ $13c
  121. spr7ptl        equ $13e
  122.  
  123. ; move.l #length,d0
  124. ; moveq.l #2,d1    ; chipmem
  125. ; move.l 4.w,a6
  126. ; jsr allocmem(a6) = -198
  127.  
  128. ; tst.l d0
  129. ; beq.s ohbugger
  130. ; move.l d0,memaddr
  131.  
  132.  
  133. ; move.l 4.w,a6
  134. ; move.l memaddr,a1
  135. ; move.l #size,d0
  136. ; jsr freemem(a6) =-210
  137.  
  138.  
  139. ** This waits for the blitter to finish before allowing program
  140. ** execution to continue.
  141.  
  142.  include "ab3:source/protsetupdecode"
  143.  
  144. SAVEREGS MACRO
  145.  movem.l d0-d7/a0-a6,-(a7)
  146.  ENDM
  147.  
  148. GETREGS MACRO
  149.  movem.l (a7)+,d0-d7/a0-a6
  150.  ENDM
  151.  
  152.  
  153. WB MACRO
  154. \@bf:
  155.  btst #6,dmaconr(a6)
  156.  bne.s \@bf
  157.  ENDM
  158.  
  159. *Another version for when a6 <> dff000
  160.  
  161. WBSLOW MACRO
  162. \@bf:
  163.  btst #6,$dff000+dmaconr
  164.  bne.s \@bf
  165.  ENDM
  166.  
  167. WT MACRO
  168. \@bf:
  169.  btst #6,(a3)
  170.  bne.s \@bd
  171.  rts
  172. \@bd: 
  173.  btst #4,(a0)
  174.  beq.s \@bf
  175.  ENDM
  176.  
  177. WTNOT MACRO
  178. \@bf:
  179.  btst #6,(a3)
  180.  bne.s \@bd
  181.  rts
  182. \@bd: 
  183.  btst #4,(a0)
  184.  bne.s \@bf
  185.  ENDM
  186.  
  187. **
  188.  
  189.  include "macros.i"
  190.  include "ab3:source/defs.i"
  191.  
  192.  move.w (a0)+,mors
  193.  
  194.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  195.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  196.  
  197.  st GOURSEL
  198.  
  199.  clr.b PLR1KEYS
  200.  clr.b PLR1PATH
  201.  clr.b PLR1MOUSE
  202.  st PLR1JOY
  203.  clr.b PLR2KEYS
  204.  clr.b PLR2PATH
  205.  clr.b PLR2MOUSE
  206.  st PLR2JOY
  207.  
  208.  PRSDO
  209.  
  210.  move.l #2,d1    
  211.  move.l #10240*2,d0
  212.  move.l 4.w,a6
  213.  jsr -198(a6)
  214.  move.l d0,TEXTSCRN
  215.  move.w d0,TSPTl
  216.  swap d0
  217.  move.w d0,TSPTh
  218.  
  219.  move.l #nullspr,d0
  220.  move.w d0,txs0l
  221.  move.w d0,txs1l
  222.  move.w d0,txs2l
  223.  move.w d0,txs3l
  224.  move.w d0,txs4l
  225.  move.w d0,txs5l
  226.  move.w d0,txs6l
  227.  move.w d0,txs7l
  228.  swap d0
  229.  move.w d0,txs0h
  230.  move.w d0,txs1h
  231.  move.w d0,txs2h
  232.  move.w d0,txs3h
  233.  move.w d0,txs4h
  234.  move.w d0,txs5h
  235.  move.w d0,txs6h
  236.  move.w d0,txs7h 
  237.  
  238.  move.l #1,d1    
  239.  move.l #120000,d0
  240.  move.l 4.w,a6
  241.  jsr -198(a6)
  242.  move.l d0,LEVELDATA
  243.  
  244.  jsr START
  245.  
  246.  rts
  247.  
  248. * Load level into buffers.
  249.  clr.b doanything
  250.  
  251. ; DRAW TEXT SCREEN
  252.  
  253. TWEENTEXT:
  254.  
  255.  move.l #LEVELTEXT,a0
  256.  move.w PLOPT,d0
  257.  muls #82*16,d0
  258.  add.l d0,a0
  259.  
  260.  move.w #14,d7
  261.  move.w #0,d0
  262. DOWNTEXT:
  263.  move.l TEXTSCRN,a1
  264.  jsr DRAWLINEOFTEXT
  265.  addq #1,d0
  266.  add.w #82,a0
  267.  dbra d7,DOWNTEXT
  268.  rts
  269.  
  270. FONTADDRS:
  271.  dc.l ENDFONT0,CHARWIDTHS0
  272.  dc.l ENDFONT1,CHARWIDTHS1
  273.  dc.l ENDFONT2,CHARWIDTHS2
  274.  
  275. ENDFONT0:
  276.  incbin "endfont0"
  277. CHARWIDTHS0:
  278.  incbin "charwidths0"
  279. ENDFONT1:
  280.  incbin "endfont1"
  281. CHARWIDTHS1:
  282.  incbin "charwidths1"
  283. ENDFONT2:
  284.  incbin "endfont2"
  285. CHARWIDTHS2:
  286.  incbin "charwidths2"
  287.  
  288.  even
  289.  
  290. DRAWLINEOFTEXT:
  291.  movem.l d0/a0/d7,-(a7)
  292.  
  293.  muls #80*16,d0
  294.  add.l d0,a1    ; screen pointer
  295.  
  296.  move.l #FONTADDRS,a3
  297.  moveq #0,d0
  298.  move.b (a0)+,d0
  299.  move.l (a3,d0.w*8),a2
  300.  move.l 4(a3,d0.w*8),a3
  301.  
  302.  moveq #0,d1    ; width counter:
  303.  move.w #79,d6
  304.  tst.b (a0)+
  305.  beq.s NOTCENTRED
  306.  moveq #-1,d5
  307.  move.l a0,a4
  308.  moveq #0,d2
  309.  moveq #0,d3
  310.  move.w #79,d0    ; number of chars
  311. .addup:
  312.  addq #1,d5
  313.  move.b (a4)+,d2
  314.  move.b -32(a3,d2.w),d4
  315.  add.w d4,d3
  316.  cmp.b #32,d2
  317.  beq.s .DONTPUTIN
  318.  move.w d5,d6
  319.  move.w d3,d1
  320. .DONTPUTIN:
  321.  dbra d0,.addup
  322.  asr.w #1,d1
  323.  neg.w d1
  324.  add.w #320,d1    ; horiz pos of start x
  325.  
  326. NOTCENTRED:
  327.  move.w d6,d7
  328. DOACHAR:
  329.  moveq #0,d2
  330.  move.b (a0)+,d2
  331.  sub.w #32,d2
  332.  moveq #0,d6
  333.  move.b (a3,d2.w),d6
  334.  asl.w #5,d2
  335.  lea (a2,d2.w),a4    ; char font
  336. val SET 0
  337.  REPT 16
  338.  move.w (a4)+,d0
  339.  bfins d0,val(a1){d1:d6}
  340. val SET val+80
  341.  ENDR
  342.  add.w d6,d1
  343.  dbra d7,DOACHAR
  344.  movem.l (a7)+,d0/a0/d7
  345.  rts 
  346.  
  347.  
  348. CLRTWEENSCRN:
  349.  move.l TEXTSCRN,a0
  350.  move.w #(10240/16)-1,d0
  351.  move.l #$0,d1
  352. .lll
  353.  move.l d1,(a0)+
  354.  move.l d1,(a0)+
  355.  move.l d1,(a0)+
  356.  move.l d1,(a0)+
  357.  move.l d1,(a0)+
  358.  move.l d1,(a0)+
  359.  move.l d1,(a0)+
  360.  move.l d1,(a0)+
  361.  dbra d0,.lll
  362.  rts
  363.  
  364. PLAYTHEGAME:
  365.  
  366.  move.w #0,TXTCOLL
  367.  
  368.  bsr CLRTWEENSCRN
  369.  
  370.  cmp.b #'n',mors
  371.  bne.s .notext
  372.  bsr TWEENTEXT
  373. .notext
  374.  
  375.  move.l #TEXTCOP,$dff080
  376.  
  377.  move.w #$10,d0
  378.  move.w #7,d1
  379.  
  380. .fdup
  381.  move.w d0,TXTCOLL
  382.  add.w #$121,d0
  383. .wtframe:
  384.  btst #5,$dff000+intreqrl
  385.  beq.s .wtframe
  386.  move.w #$0020,$dff000+intreq
  387.  dbra d1,.fdup
  388.  
  389.  jsr INITCOPPERSCRN
  390.  
  391. ; Get level memory.
  392.  
  393.  move.l #1,d1
  394.  move.l #50000,d0
  395.  move.l 4.w,a6
  396.  jsr -198(a6)
  397.  move.l d0,LEVELGRAPHICS
  398.  
  399.  move.l #1,d1
  400.  move.l #40000,d0
  401.  move.l 4.w,a6
  402.  jsr -198(a6)
  403.  move.l d0,LEVELCLIPS
  404.  
  405.  move.l #$dff000,a6
  406.  jsr SETPLAYERS
  407.  
  408. ; move.l #LEVELDATAD,LEVELDATA
  409. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  410. ; move.l #LEVELCLIPSD,LEVELCLIPS
  411.  
  412. ; bra noload
  413.  
  414.  move.l doslib,a6
  415.  move.l #LDname,d1
  416.  move.l #1005,d2
  417.  jsr -30(a6)
  418.  move.l d0,LDhandle
  419.  
  420.  move.l doslib,a6
  421.  move.l d0,d1
  422.  move.l LEVELCLIPS,d2
  423.  move.l #40000,d3
  424.  jsr -42(a6)
  425.  
  426.  move.l doslib,a6
  427.  move.l LDhandle,d1
  428.  jsr -36(a6)
  429.  
  430. *************************************
  431.     move.l    LEVELCLIPS,d0
  432.     moveq    #0,d1
  433.     move.l LEVELDATA,a0
  434.     lea    WorkSpace,a1
  435.     lea    $0,a2
  436.     jsr    unLHA
  437. *************************************
  438.  
  439. ********
  440.  
  441.  move.l doslib,a6
  442.  move.l #LGname,d1
  443.  move.l #1005,d2
  444.  jsr -30(a6)
  445.  move.l d0,LGhandle
  446.  
  447.  move.l doslib,a6
  448.  move.l d0,d1
  449.  move.l LEVELCLIPS,d2
  450.  move.l #40000,d3
  451.  jsr -42(a6)
  452.  
  453.  move.l doslib,a6
  454.  move.l LGhandle,d1
  455.  jsr -36(a6)
  456.  
  457. *************************************
  458.     move.l    LEVELCLIPS,d0
  459.     moveq    #0,d1
  460.     move.l LEVELGRAPHICS,a0
  461.     lea    WorkSpace,a1
  462.     lea    $0,a2
  463.     jsr    unLHA
  464. *************************************
  465.  
  466.  
  467. ********
  468.  
  469.  move.l doslib,a6
  470.  move.l #LCname,d1
  471.  move.l #1005,d2
  472.  jsr -30(a6)
  473.  move.l d0,LChandle
  474.  
  475.  move.l doslib,a6
  476.  move.l d0,d1
  477.  move.l #WorkSpace+16384,d2
  478.  move.l #16000,d3
  479.  jsr -42(a6)
  480.  
  481.  move.l doslib,a6
  482.  move.l LChandle,d1
  483.  jsr -36(a6)
  484.  
  485. *************************************
  486.     move.l    #WorkSpace+16384,d0
  487.     moveq    #0,d1
  488.     move.l LEVELCLIPS,a0
  489.     lea    WorkSpace,a1
  490.     lea    $0,a2
  491.     jsr    unLHA
  492. *************************************
  493.  
  494.  
  495. *******
  496.  
  497. noload:
  498.  
  499. ********
  500.  
  501. ; move.l doslib,a6
  502. ; move.l #Prefsname,d1
  503. ; move.l #1005,d2
  504. ; jsr -30(a6)
  505. ; move.l d0,Prefshandle
  506.  
  507. ; move.l doslib,a6
  508. ; move.l d0,d1
  509. ; move.l #Prefsfile,d2
  510. ; move.l #50,d3
  511. ; jsr -42(a6)
  512.  
  513. ; move.l doslib,a6
  514. ; move.l Prefshandle,d1
  515. ; jsr -36(a6)
  516.  
  517. *******
  518.  
  519.  cmp.b #'s',Prefsfile+2
  520.  seq STEREO
  521.  
  522.  IFNE CD32VER
  523.  move.l doslib,a6
  524.  move.l #115,d1
  525.  jsr -198(a6)
  526.  ENDC
  527.  
  528.  
  529.  move.l doslib,d0
  530.  move.l d0,a1
  531.  move.l 4.w,a6
  532.  jsr CloseLib(a6)
  533.  
  534.  move.l #$dff000,a6
  535.  move.w #$87c0,dmacon(a6)
  536.  move.w #$8020,dmacon(a6)
  537.  move.w intenar(a6),saveinters
  538.  move.w #$7fff,intena(a6)
  539.  move.w #$00ff,$dff09e
  540.  
  541. *** Put myself in supervisor mode
  542.  
  543.  bra blag
  544. ; move.l $6c,d0
  545. ; move.l #blag,$6c
  546. ; move.w #$8010,intreq(a6)
  547.  
  548.  rts
  549.  
  550. saveit: ds.l 10
  551. doslibname: dc.b 'dos.library',0
  552.  even
  553. doslib: dc.l 0
  554.  
  555. mors: dc.w 0
  556.  
  557. LDname: dc.b 'ab3d2:levels/level_'
  558. LEVA:
  559.  dc.b 'a/twolev.bin',0
  560.  even
  561. LDhandle: dc.l 0
  562. LGname: dc.b 'ab3d2:levels/level_'
  563. LEVB:
  564.  dc.b 'a/twolev.graph.bin',0
  565.  even
  566. LGhandle: dc.l 0
  567. LCname: dc.b 'ab3d2:levels/level_'
  568. LEVC:
  569.  dc.b 'a/twolev.clips',0
  570.  even
  571. LChandle: dc.l 0
  572.  
  573. Prefsname: dc.b 'ram:prefs',0
  574.  even
  575. Prefshandle: dc.l 0
  576.  
  577. Prefsfile:
  578.  dc.b 'k4nx'
  579.  ds.b 50
  580.  
  581.  even
  582.  
  583. VBLANKInt
  584.  dc.l 0,0
  585.  dc.b 5,10
  586.  dc.l 0
  587.  dc.l 0
  588.  dc.l Chan0inter
  589.  
  590.  
  591. blag:
  592. ; move.w #$10,intreq(a6)
  593. ; move.l d0,$6c
  594. ; move.w #$7fff,intena(a6)
  595.  
  596.  move.w #$20,$dff1dc
  597.  
  598. ; move.l 4.w,a6
  599. ; lea VBLANKInt,a1
  600. ; moveq #5,d0
  601. ; jsr _LVOAddIntServer(a6)
  602.  
  603.  move.l $6c.w,saveit
  604.  move.l #Chan0inter,$6c.w
  605.  
  606. ****************************
  607. * Initialize level
  608. ****************************
  609. * Poke all clip offsets into
  610. * correct bit of level data.
  611. ****************************
  612.  move.l LEVELGRAPHICS,a0
  613.  move.l 12(a0),a1
  614.  add.l a0,a1
  615.  move.l a1,ZoneGraphAdds
  616.  move.l (a0),a1
  617.  add.l a0,a1
  618.  move.l a1,DoorData
  619.  move.l 4(a0),a1
  620.  add.l a0,a1
  621.  move.l a1,LiftData
  622.  move.l 8(a0),a1
  623.  add.l a0,a1
  624.  move.l a1,SwitchData
  625.  adda.w #16,a0
  626.  move.l a0,ZoneAdds
  627.  
  628.  move.l LEVELDATA,a1
  629.  move.l 16+6(a1),a2
  630.  add.l a1,a2
  631.  move.l a2,Points
  632.  move.w 8+6(a1),d0
  633.  lea 4(a2,d0.w*4),a2
  634.  move.l a2,PointBrights
  635.  
  636.  move.l 20+6(a1),a2
  637.  add.l a1,a2
  638.  move.l a2,FloorLines
  639.  move.l 24+6(a1),a2
  640.  add.l a1,a2
  641.  move.l a2,ObjectData
  642. *****************************************
  643. * Just for charles
  644.  
  645. ; move.w #$6060,6(a2)
  646. ; move.l #$d0000,8(a2)
  647. ; sub.w #40,4(a2)
  648. ; move.w #45*256+45,14(a2)
  649. ****************************************
  650.  move.l 28+6(a1),a2
  651.  add.l a1,a2
  652.  move.l a2,PlayerShotData
  653.  move.l 32+6(a1),a2
  654.  add.l a1,a2
  655.  move.l a2,NastyShotData
  656.  
  657.  add.l #64*20,a2
  658.  move.l a2,OtherNastyData
  659.  
  660.  move.l 36+6(a1),a2
  661.  add.l a1,a2
  662.  move.l a2,ObjectPoints  
  663.  move.l 40+6(a1),a2
  664.  add.l a1,a2
  665.  move.l a2,PLR1_Obj
  666.  move.l 44+6(a1),a2
  667.  add.l a1,a2
  668.  move.l a2,PLR2_Obj
  669.  move.w 14+6(a1),NumObjectPoints
  670.  
  671. ; bra noclips
  672.   
  673.  move.l LEVELCLIPS,a2
  674.  moveq #0,d0
  675.  move.w 10+6(a1),d7    ;numzones
  676. assignclips:
  677.  move.l (a0)+,a3
  678.  add.l a1,a3    ; pointer to a zone
  679.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  680. dowholezone:
  681.  tst.w (a3)
  682.  blt.s nomorethiszone
  683.  tst.w 2(a3)
  684.  blt.s thisonenull
  685.  
  686.  move.l d0,d1
  687.  asr.l #1,d1
  688.  move.w d1,2(a3)
  689.  
  690. findnextclip:
  691.  cmp.w #-2,(a2,d0.l)
  692.  beq.s foundnextclip
  693.  addq.l #2,d0
  694.  bra.s findnextclip
  695. foundnextclip
  696.  addq.l #2,d0
  697.  
  698. thisonenull:
  699.  addq #8,a3 
  700.  bra.s dowholezone
  701. nomorethiszone:
  702.  dbra d7,assignclips
  703.  
  704.  lea (a2,d0.l),a2
  705.  move.l a2,CONNECT_TABLE
  706.  
  707. noclips:
  708.  
  709. * Put in addresses of glowything
  710.  
  711.  
  712. ************************************
  713.  
  714. ; cmp.b #'k',Prefsfile
  715. ; bne.s nkb
  716.  
  717. ;nkb:
  718. ; cmp.b #'m',Prefsfile
  719. ; bne.s nmc
  720. ; clr.b PLR1KEYS
  721. ; clr.b PLR1PATH
  722. ; st PLR1MOUSE
  723. ; clr.b PLR1JOY
  724. ;nmc:
  725. ; cmp.b #'j',Prefsfile
  726. ; bne.s njc
  727. ; clr.b PLR1KEYS
  728. ; clr.b PLR1PATH
  729. ; clr.b PLR1MOUSE
  730. ; st PLR1JOY
  731. ;njc:
  732.  
  733.  clr.b PLR1_StoodInTop
  734.  move.l #playerheight,PLR1s_height
  735.  
  736.  move.l #empty,pos1LEFT
  737.  move.l #empty,pos2LEFT
  738.  move.l #empty,pos1RIGHT
  739.  move.l #empty,pos2RIGHT
  740.  move.l #emptyend,Samp0endLEFT
  741.  move.l #emptyend,Samp1endLEFT
  742.  move.l #emptyend,Samp0endRIGHT
  743.  move.l #emptyend,Samp1endRIGHT
  744.  
  745.  move.l #nullspr,d0
  746.  move.w d0,s4l
  747.  move.w d0,s5l
  748.  move.w d0,s6l
  749.  move.w d0,s7l
  750.  swap d0
  751.  move.w d0,s4h
  752.  move.w d0,s5h
  753.  move.w d0,s6h
  754.  move.w d0,s7h 
  755.  
  756.  move.l #nullline,d0
  757.  move.w d0,n1l
  758.  swap d0
  759.  move.w d0,n1h
  760.  
  761.  move.l Panel,d0
  762.  move.w d0,p1l
  763.  swap d0
  764.  move.w d0,p1h
  765.  swap d0
  766.  add.l #40,d0
  767.  move.w d0,p2l
  768.  swap d0
  769.  move.w d0,p2h
  770.  swap d0
  771.  add.l #40,d0
  772.  move.w d0,p3l
  773.  swap d0
  774.  move.w d0,p3h
  775.  swap d0
  776.  add.l #40,d0
  777.  move.w d0,p4l
  778.  swap d0
  779.  move.w d0,p4h
  780.  swap d0
  781.  add.l #40,d0
  782.  move.w d0,p5l
  783.  swap d0
  784.  move.w d0,p5h
  785.  swap d0
  786.  add.l #40,d0
  787.  move.w d0,p6l
  788.  swap d0
  789.  move.w d0,p6h
  790.  swap d0
  791.  add.l #40,d0
  792.  move.w d0,p7l
  793.  swap d0
  794.  move.w d0,p7h
  795.  swap d0
  796.  add.l #40,d0
  797.  move.w d0,p8l
  798.  swap d0
  799.  move.w d0,p8h
  800.  
  801. *******************************
  802. * TIMER SCREEN SETUP
  803. ; move.l #TimerScr,d0
  804. ; move.w d0,p1l
  805. ; swap d0
  806. ; move.w d0,p1h
  807. ; move.w #$1201,Panelcon
  808.  
  809.  move.l #borders,d0
  810.  move.w d0,s0l
  811.  swap d0
  812.  move.w d0,s0h
  813.  move.l #borders+2592,d0
  814.  move.w d0,s1l
  815.  swap d0
  816.  move.w d0,s1h
  817.  move.l #borders+2592*2,d0
  818.  move.w d0,s2l
  819.  swap d0
  820.  move.w d0,s2h
  821.  move.l #borders+2592*3,d0
  822.  move.w d0,s3l
  823.  swap d0
  824.  move.w d0,s3h
  825.  
  826.  move.w #52*256+64,borders
  827.  move.w #212*256+0,borders+8
  828.  move.w #52*256+64,borders+2592
  829.  move.w #212*256+128,borders+8+2592
  830.  move.w #52*256+192,borders+2592*2
  831.  move.w #212*256+0,borders+8+2592*2
  832.  move.w #52*256+192,borders+2592*3
  833.  move.w #212*256+128,borders+8+2592*3
  834.  
  835.  move.l #FacePlace,d0
  836.  move.w d0,f1l
  837.  swap d0
  838.  move.w d0,f1h
  839.  move.l #FacePlace+32*24,d0
  840.  move.w d0,f2l
  841.  swap d0
  842.  move.w d0,f2h
  843.  move.l #FacePlace+32*24*2,d0
  844.  move.w d0,f3l
  845.  swap d0
  846.  move.w d0,f3h
  847.  move.l #FacePlace+32*24*3,d0
  848.  move.w d0,f4l
  849.  swap d0
  850.  move.w d0,f4h
  851.  move.l #FacePlace+32*24*4,d0
  852.  move.w d0,f5l
  853.  swap d0
  854.  move.w d0,f5h
  855.   
  856.  
  857.  move.l #bigfield,d0
  858.  move.w d0,ocl
  859.  swap d0
  860.  move.w d0,och
  861.  
  862.  bset.b #1,$bfe001
  863.  
  864. ; jmp stuff
  865. ;endstuff:
  866.  
  867.  move.w #$00ff,$dff09e
  868.  
  869. ; move.l #Blurbfield,$dff080
  870.  
  871.  move.w #0,d0
  872.  
  873.  move.l #scrn,d0
  874.  move.w d0,pl1l
  875.  swap d0
  876.  move.w d0,pl1h
  877.  
  878.  move.l #scrn+40,d0
  879.  move.w d0,pl2l
  880.  swap d0
  881.  move.w d0,pl2h
  882.  
  883.  move.l #scrn+80,d0
  884.  move.w d0,pl3l
  885.  swap d0
  886.  move.w d0,pl3h
  887.  
  888.  move.l #scrn+120,d0
  889.  move.w d0,pl4l
  890.  swap d0
  891.  move.w d0,pl4h
  892.  
  893.  move.l #scrn+160,d0
  894.  move.w d0,pl5l
  895.  swap d0
  896.  move.w d0,pl5h
  897.  
  898.  move.l #scrn+200,d0
  899.  move.w d0,pl6l
  900.  swap d0
  901.  move.w d0,pl6h
  902.  
  903.  move.l #scrn+240,d0
  904.  move.w d0,pl7l
  905.  swap d0
  906.  move.w d0,pl7h
  907.  
  908.  
  909. ****************************
  910.  jsr INITPLAYER
  911. ; bsr initobjpos
  912. ****************************
  913.  
  914.  
  915.  move.l #$dff000,a6
  916.  
  917.  move.l #null,$dff0a0
  918.  move.w #100,$dff0a4
  919.  move.w #443,$dff0a6
  920.  move.w #63,$dff0a8
  921.  
  922.  move.l #null2,$dff0b0
  923.  move.w #100,$dff0b4
  924.  move.w #443,$dff0b6
  925.  move.w #63,$dff0b8
  926.  
  927.  move.l #null4,$dff0c0
  928.  move.w #100,$dff0c4
  929.  move.w #443,$dff0c6
  930.  move.w #63,$dff0c8
  931.  
  932.  move.l #null3,$dff0d0
  933.  move.w #100,$dff0d4
  934.  move.w #443,$dff0d6
  935.  move.w #63,$dff0d8
  936.  
  937.  move.l #tab,a1
  938.  move.w #64,d7
  939.  move.w #0,d6
  940. outerlop
  941.  move.l #pretab,a0
  942.  move.w #255,d5
  943. scaledownlop:
  944.  move.b (a0)+,d0
  945.  ext.w d0
  946.  ext.l d0
  947.  muls d6,d0
  948.  asr.l #6,d0
  949.  move.b d0,(a1)+
  950.  dbra d5,scaledownlop
  951.  addq #1,d6
  952.  dbra d7,outerlop
  953.  
  954.  move.l #$dff000,a6
  955.  
  956.  move.w #$c018,intena(a6)
  957.  
  958.  move.w #$f,dmacon(a6)
  959.  move.w #$820f,dmacon(a6)
  960.  
  961. ; bsr protinit
  962.  
  963.  
  964. ; move.w #$20,$1dc(a6)
  965.  
  966.  move.w #$0,$dff034
  967.  move.w #0,Conditions
  968.  
  969.  cmp.b #'n',mors
  970.  beq.s .nokeys
  971.  move.w #%111111111111,Conditions
  972. .nokeys:
  973.  
  974.  move.l #KeyMap,a5
  975.  clr.b $45(a5)
  976.  
  977.  move.l #ingame,mt_data
  978.  clr.b UseAllChannels
  979.  
  980. ; cmp.b #'b',Prefsfile+3
  981. ; bne.s .noback
  982. ; jsr mt_init
  983. ;.noback:
  984. ;
  985. ; clr.b CHANNELDATA
  986. ; clr.b CHANNELDATA+8
  987. ; clr.b CHANNELDATA+16
  988. ; clr.b CHANNELDATA+24
  989. ;
  990. ; cmp.b #'b',Prefsfile+3
  991. ; bne.s noreserve
  992. ;
  993. ; st CHANNELDATA
  994. ; st CHANNELDATA+8
  995. ; st CHANNELDATA+16
  996. ; st CHANNELDATA+24
  997. ;noreserve: 
  998.  
  999. ; st CHANNELDATA
  1000. ; st CHANNELDATA+8
  1001.  
  1002.  move.l SampleList+6*8,pos0LEFT
  1003.  move.l SampleList+6*8+4,Samp0endLEFT
  1004.  move.l #playerheight,PLR1s_targheight
  1005.  move.l #playerheight,PLR1s_height
  1006.  move.l #playerheight,PLR2s_targheight
  1007.  move.l #playerheight,PLR2s_height
  1008.  
  1009. ; cmp.b #'n',mors
  1010. ; beq.s nohandshake
  1011. ;
  1012. ; move.b #%11011000,$bfd200
  1013. ; move.b #%00010000,$bfd000
  1014. ;waitloop:
  1015. ; btst.b #4,$bfd000
  1016. ; bne.s waitloop
  1017. ; move.b #%11000000,$bfd200
  1018.  
  1019. ;wtmouse:
  1020. ; btst #6,$bfe001
  1021. ; bne.s wtmouse
  1022.  
  1023. ;nohandshake:
  1024.  st doanything
  1025.  
  1026. ; jmp end
  1027.  
  1028.  move.l COPSCRN1,drawpt
  1029.  move.l COPSCRN2,olddrawpt
  1030.  
  1031.  IFEQ CD32VER
  1032.  jsr KInt_Init
  1033.  jsr CLEARKEYBOARD
  1034.  ENDC
  1035.  jsr MAKEBACKROUT
  1036.  
  1037.  clr.b MASTERQUITTING
  1038.  
  1039.  cmp.b #'n',mors
  1040.  seq SLAVEQUITTING
  1041.  
  1042.  move.w #127,PLR2_energy
  1043.  
  1044. ; move.l #ANOTHERSUP,$80
  1045. ; trap #0
  1046. ; rts
  1047. ;
  1048. ;ANOTHERSUP:
  1049.  
  1050.  CACHE_FREEZE_OFF d2
  1051.  
  1052.  move.w #0,hitcol
  1053.  move.w #0,hitcol2
  1054.  
  1055.  cmp.b #'n',mors
  1056.  bne.s NOCLTXT
  1057.  
  1058.  move.b #0,lastpressed
  1059. .wtpress
  1060.  btst #6,$bfe001
  1061.  beq.s CLOSETXT
  1062.  btst #7,$bfe001
  1063.  beq.s CLOSETXT
  1064.  tst.b lastpressed
  1065.  beq.s .wtpress
  1066.  
  1067. CLOSETXT:
  1068.  
  1069.  move.w #$8f8,d0
  1070.  move.w #7,d1
  1071.  
  1072. .fdup
  1073.  move.w d0,TXTCOLL
  1074.  sub.w #$121,d0
  1075. .wtframe:
  1076.  btst #5,$dff000+intreqrl
  1077.  beq.s .wtframe
  1078.  move.w #$0020,$dff000+intreq
  1079.  dbra d1,.fdup
  1080.  
  1081.  move.w #0,TXTCOLL
  1082.  
  1083. NOCLTXT:
  1084.  
  1085.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1086.  
  1087.  clr.b PLR1_Ducked
  1088.  clr.b PLR2_Ducked
  1089.  clr.b p1_ducked
  1090.  clr.b p2_ducked
  1091.  
  1092. ********************************************
  1093. ; jmp  ENDGAMESCROLL
  1094. ********************************************
  1095.  
  1096.  DATA_CACHE_ON d2
  1097.  
  1098. lop:
  1099.  
  1100.  
  1101.  cmp.b #'n',mors
  1102.  bne .nopause
  1103.  
  1104.  move.l #KeyMap,a5
  1105.  tst.b $19(a5)
  1106.  beq.s .nopause
  1107.  clr.b doanything
  1108.  
  1109. .waitrel:
  1110.  tst.b $19(a5)
  1111.  bne.s .waitrel
  1112.  
  1113.  bsr PAUSEOPTS
  1114.  
  1115.  
  1116.  st doanything
  1117. .nopause: 
  1118.  
  1119.  st READCONTROLS
  1120.  move.l #$dff000,a6
  1121.  
  1122.  move.w hitcol,d0
  1123.  beq.s nofadedownhc
  1124.  sub.w #$100,d0
  1125.  move.w d0,hitcol
  1126.  move.w d0,hitcol2
  1127. nofadedownhc:
  1128.  
  1129.  cmp.b #'n',mors
  1130.  beq .nopause
  1131.  
  1132.  move.b SLAVEPAUSE,d0
  1133.  or.b MASTERPAUSE,d0
  1134.  beq.s .nopause
  1135.  clr.b doanything
  1136.  
  1137.  move.l #KeyMap,a5
  1138. .waitrel:
  1139.  tst.b $19(a5)
  1140.  bne.s .waitrel
  1141.  
  1142.  bsr PAUSEOPTS
  1143.  
  1144.  cmp.b #'m',mors
  1145.  bne.s .slavelast
  1146.  Jsr SENDFIRST
  1147.  bra .masfirst
  1148. .slavelast
  1149.  Jsr RECFIRST
  1150. .masfirst:
  1151.  clr.b SLAVEPAUSE
  1152.  clr.b MASTERPAUSE
  1153.  st doanything
  1154.  
  1155. .nopause: 
  1156.  
  1157.  
  1158.  
  1159.  move.l drawpt,d0
  1160.  move.l olddrawpt,drawpt
  1161.  move.l d0,olddrawpt
  1162.  move.l d0,$dff084    
  1163.  move.l drawpt,a3
  1164. ; move.l COPSCRNBUFF,a3
  1165.  adda.w #10,a3
  1166.  move.l a3,frompt
  1167.  add.l #104*4*40,a3
  1168.  move.l a3,midpt
  1169.  
  1170.  cmp.b #'s',mors
  1171.  beq.s nowaitslave
  1172.  
  1173. waitfortop:
  1174.  btst.b #0,intreqrl(a6)
  1175.  beq waitfortop
  1176.  move.w #$1,intreq(a6)
  1177.  
  1178.  move.l #PLR1_GunData,GunData
  1179.  move.b PLR1_GunSelected,GunSelected
  1180.  bra waitmaster
  1181.  
  1182. nowaitslave:
  1183.  move.l #PLR2_GunData,GunData
  1184.  move.b PLR2_GunSelected,GunSelected
  1185. waitmaster:
  1186.  
  1187.  
  1188.  move.l waterpt,a0
  1189.  move.l (a0)+,watertouse
  1190.  cmp.l #endwaterlist,a0
  1191.  blt.s okwat
  1192.  move.l #waterlist,a0
  1193. okwat:
  1194.  move.l a0,waterpt
  1195.  
  1196.  add.w #640,wtan
  1197.  and.w #8191,wtan
  1198.  add.w #1,wateroff
  1199.  and.w #63,wateroff
  1200.  
  1201.  move.l GunData,a6
  1202.  moveq #0,d0
  1203.  move.b GunSelected,d0
  1204.  lsl.w #2,d0
  1205.  lea (a6,d0.w*8),a6
  1206.  move.w (a6),d0
  1207.  asr.w #3,d0
  1208.  move.w d0,Ammo
  1209.  
  1210.  move.l PLR1_xoff,OLDX1
  1211.  move.l PLR1_zoff,OLDZ1
  1212.  move.l PLR2_xoff,OLDX2
  1213.  move.l PLR2_zoff,OLDZ2
  1214.  
  1215.  
  1216.  
  1217.  move.l #$dff000,a6
  1218.  
  1219.  cmp.b #'s',mors
  1220.  beq ASlaveShouldWaitOnHisMaster
  1221.  
  1222.  cmp.b #'n',mors
  1223.  bne NotOnePlayer
  1224.  
  1225.  move.w PLR1_energy,Energy
  1226.  move.w FramesToDraw,TempFrames
  1227.  cmp.w #15,TempFrames
  1228.  blt.s .okframe
  1229.  move.w #15,TempFrames
  1230. .okframe:
  1231.  move.w #0,FramesToDraw
  1232.  
  1233. *********************************************
  1234. *********** TAKE THIS OUT *******************
  1235. *********************************************
  1236.  move.l #KeyMap,a5
  1237.  tst.b (a5)
  1238.  beq.s .nocheat
  1239.  move.w #127,PLR1_energy
  1240.  bsr EnergyBar
  1241. .nocheat
  1242. **********************************************
  1243. **********************************************
  1244. **********************************************
  1245.  
  1246.  move.l PLR1s_xoff,p1_xoff
  1247.  move.l PLR1s_zoff,p1_zoff
  1248.  move.l PLR1s_yoff,p1_yoff
  1249.  move.l PLR1s_height,p1_height
  1250.  move.w PLR1s_angpos,p1_angpos
  1251.  move.w PLR1_bobble,p1_bobble
  1252.  move.b PLR1_clicked,p1_clicked
  1253.  move.b PLR1_fire,p1_fire
  1254.  clr.b PLR1_clicked
  1255.  move.b PLR1_SPCTAP,p1_spctap
  1256.  clr.b PLR1_SPCTAP
  1257.  move.b PLR1_Ducked,p1_ducked
  1258.  move.b PLR1_GunSelected,p1_gunselected
  1259.  
  1260.  bsr PLR1_Control
  1261.  
  1262.  move.l PLR1_Roompt,a0
  1263.  move.l ToZoneRoof(a0),SplitHeight
  1264.  move.w p1_xoff,THISPLRxoff
  1265.  move.w p1_zoff,THISPLRzoff
  1266.  
  1267.  
  1268.  move.l #$60000,p2_yoff
  1269.  move.l PLR2_Obj,a0
  1270.  move.w #-1,GraphicRoom(a0)
  1271.  move.w #-1,12(a0)
  1272.  move.b #0,17(a0)
  1273.  move.l #BollocksRoom,PLR2_Roompt
  1274.  
  1275.  bra donetalking
  1276.  
  1277. NotOnePlayer:
  1278.  move.l #KeyMap,a5
  1279.  tst.b $19(a5)
  1280.  sne MASTERPAUSE
  1281.  
  1282. *********************************
  1283.  move.w PLR1_energy,Energy
  1284. ; change this back
  1285. *********************************
  1286.  
  1287.  jsr SENDFIRST
  1288.  
  1289.  move.w FramesToDraw,TempFrames
  1290.  cmp.w #15,TempFrames
  1291.  blt.s .okframe
  1292.  move.w #15,TempFrames
  1293. .okframe:
  1294.  move.w #0,FramesToDraw
  1295.  
  1296.  move.l PLR1s_xoff,p1_xoff
  1297.  move.l PLR1s_zoff,p1_zoff
  1298.  move.l PLR1s_yoff,p1_yoff
  1299.  move.l PLR1s_height,p1_height
  1300.  move.w PLR1s_angpos,p1_angpos
  1301.  move.w PLR1_bobble,p1_bobble
  1302.  move.b PLR1_clicked,p1_clicked
  1303.  clr.b PLR1_clicked
  1304.  move.b PLR1_fire,p1_fire
  1305.  move.b PLR1_SPCTAP,p1_spctap
  1306.  clr.b PLR1_SPCTAP
  1307.  move.b PLR1_Ducked,p1_ducked
  1308.  move.b PLR1_GunSelected,p1_gunselected
  1309.  
  1310.  move.l p1_xoff,d0
  1311.  jsr SENDFIRST
  1312.  move.l d0,p2_xoff
  1313.  
  1314.  move.l p1_zoff,d0
  1315.  jsr SENDFIRST
  1316.  move.l d0,p2_zoff 
  1317.  
  1318.  move.l p1_yoff,d0
  1319.  jsr SENDFIRST
  1320.  move.l d0,p2_yoff
  1321.   
  1322.  move.l p1_height,d0
  1323.  jsr SENDFIRST
  1324.  move.l d0,p2_height
  1325.  
  1326.  move.w p1_angpos,d0
  1327.  swap d0
  1328.  move.w p1_bobble,d0
  1329.  jsr SENDFIRST
  1330.  move.w d0,p2_bobble
  1331.  swap d0
  1332.  move.w d0,p2_angpos
  1333.  
  1334.  
  1335.  move.w TempFrames,d0
  1336.  swap d0
  1337.  move.b p1_spctap,d0
  1338.  lsl.w #8,d0
  1339.  move.b p1_clicked,d0
  1340.  jsr SENDFIRST
  1341.  move.b d0,p2_clicked
  1342.  lsr.w #8,d0
  1343.  move.b d0,p2_spctap
  1344.  
  1345.  
  1346.  move.w Rand1,d0
  1347.  swap d0
  1348.  move.b p1_ducked,d0
  1349.  lsl.w #8,d0
  1350.  move.b p1_gunselected,d0
  1351.  jsr SENDFIRST
  1352.  move.b d0,p2_gunselected
  1353.  lsr.w #8,d0
  1354.  move.b d0,p2_ducked
  1355.  
  1356.  move.b p1_fire,d0
  1357.  lsl.w #8,d0
  1358.  move.b MASTERQUITTING,d0
  1359.  or.b d0,SLAVEQUITTING
  1360.  swap d0
  1361.  move.b MASTERPAUSE,d0
  1362.  or.b d0,SLAVEPAUSE
  1363.  jsr SENDFIRST
  1364.  or.b d0,MASTERPAUSE
  1365.  or.b d0,SLAVEPAUSE
  1366.  swap d0
  1367.  or.b d0,SLAVEQUITTING
  1368.  or.b d0,MASTERQUITTING
  1369.  lsr.w #8,d0
  1370.  move.b d0,p2_fire
  1371.  
  1372.  bsr PLR1_Control
  1373.  bsr PLR2_Control
  1374.  move.l PLR1_Roompt,a0
  1375.  move.l ToZoneRoof(a0),SplitHeight
  1376.  move.w p1_xoff,THISPLRxoff
  1377.  move.w p1_zoff,THISPLRzoff
  1378.  
  1379.  bra donetalking
  1380.  
  1381. ASlaveShouldWaitOnHisMaster:
  1382.  
  1383.  move.l #KeyMap,a5
  1384.  tst.b $19(a5)
  1385.  sne SLAVEPAUSE
  1386.  
  1387.  move.w PLR2_energy,Energy
  1388.  
  1389.  jsr RECFIRST
  1390.  
  1391.  move.l PLR2s_xoff,p2_xoff
  1392.  move.l PLR2s_zoff,p2_zoff
  1393.  move.l PLR2s_yoff,p2_yoff
  1394.  move.l PLR2s_height,p2_height
  1395.  move.w PLR2s_angpos,p2_angpos
  1396.  move.w PLR2_bobble,p2_bobble
  1397.  move.b PLR2_clicked,p2_clicked
  1398.  clr.b PLR2_clicked
  1399.  move.b PLR2_fire,p2_fire
  1400.  move.b PLR2_SPCTAP,p2_spctap
  1401.  clr.b PLR2_SPCTAP
  1402.  move.b PLR2_Ducked,p2_ducked
  1403.  move.b PLR2_GunSelected,p2_gunselected
  1404.  
  1405.  move.l p2_xoff,d0
  1406.  jsr RECFIRST
  1407.  move.l d0,p1_xoff
  1408.  
  1409.  move.l p2_zoff,d0
  1410.  jsr RECFIRST
  1411.  move.l d0,p1_zoff
  1412.  
  1413.  move.l p2_yoff,d0
  1414.  jsr RECFIRST
  1415.  move.l d0,p1_yoff
  1416.  
  1417.  move.l p2_height,d0
  1418.  jsr RECFIRST
  1419.  move.l d0,p1_height
  1420.  
  1421.  move.w p2_angpos,d0
  1422.  swap d0
  1423.  move.w p2_bobble,d0
  1424.  jsr RECFIRST
  1425.  move.w d0,p1_bobble
  1426.  swap d0
  1427.  move.w d0,p1_angpos
  1428.  
  1429.  
  1430.  move.b p2_spctap,d0
  1431.  lsl.w #8,d0
  1432.  move.b p2_clicked,d0
  1433.  jsr RECFIRST
  1434.  move.b d0,p1_clicked
  1435.  lsr.w #8,d0
  1436.  move.b d0,p1_spctap
  1437.  swap d0
  1438.  move.w d0,TempFrames
  1439.  
  1440.  
  1441.  move.b p2_ducked,d0
  1442.  lsl.w #8,d0
  1443.  move.b p2_gunselected,d0
  1444.  jsr RECFIRST
  1445.  move.b d0,p1_gunselected
  1446.  lsr.w #8,d0
  1447.  move.b d0,p1_ducked
  1448.  swap d0
  1449.  move.w d0,Rand1
  1450.  
  1451.  move.b p2_fire,d0
  1452.  lsl.w #8,d0
  1453.  move.b SLAVEQUITTING,d0
  1454.  or.b d0,MASTERQUITTING
  1455.  swap d0
  1456.  move.b SLAVEPAUSE,d0
  1457.  or.b d0,MASTERPAUSE
  1458.  jsr RECFIRST
  1459.  or.b d0,MASTERPAUSE
  1460.  or.b d0,SLAVEPAUSE
  1461.  swap d0
  1462.  or.b d0,SLAVEQUITTING
  1463.  or.b d0,MASTERQUITTING
  1464.  lsr.w #8,d0
  1465.  move.b d0,p1_fire
  1466.  
  1467.  
  1468.  bsr PLR1_Control
  1469.  bsr PLR2_Control
  1470.  move.w p2_xoff,THISPLRxoff
  1471.  move.w p2_zoff,THISPLRzoff
  1472.  move.l PLR2_Roompt,a0
  1473.  move.l ToZoneRoof(a0),SplitHeight
  1474.  
  1475. donetalking:
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  move.l #ZoneBrightTable,a1
  1481.  move.l ZoneAdds,a2
  1482.  move.l PLR2_ListOfGraphRooms,a0
  1483.  move.l PLR2_PointsToRotatePtr,a5
  1484.  cmp.b #'s',mors
  1485.  beq.s doallz
  1486.  move.l PLR1_ListOfGraphRooms,a0
  1487.  move.l PLR1_PointsToRotatePtr,a5
  1488.  
  1489. doallz
  1490.  move.w (a0),d0
  1491.  blt.s doneallz
  1492.  add.w #8,a0
  1493.  
  1494.  move.l (a2,d0.w*4),a3
  1495.  add.l LEVELDATA,a3
  1496.  move.w ToZoneBrightness(a3),d2
  1497.  
  1498.  blt.s justbright
  1499.  move.w d2,d3
  1500.  lsr.w #8,d3
  1501.  tst.b d3
  1502.  beq.s justbright
  1503.  
  1504.  move.l #BrightAnimTable,a4
  1505.  move.w -2(a4,d3.w*2),d2
  1506.  
  1507. justbright:
  1508.  move.w d2,(a1,d0.w*4)
  1509.  
  1510.  move.w ToUpperBrightness(a3),d2
  1511.  
  1512.  blt.s justbright2
  1513.  move.w d2,d3
  1514.  lsr.w #8,d3
  1515.  tst.b d3
  1516.  beq.s justbright2
  1517.  
  1518.  move.l #BrightAnimTable,a4
  1519.  move.w -2(a4,d3.w*2),d2
  1520.  
  1521. justbright2:
  1522.  move.w d2,2(a1,d0.w*4)
  1523.  
  1524.  bra doallz
  1525.  
  1526. doneallz:
  1527.  
  1528.  move.l PointBrights,a2
  1529.  move.l #CurrentPointBrights,a3
  1530. justtheone:
  1531.  move.w (a5)+,d0
  1532.  blt.s whythehell
  1533.  move.w (a2,d0.w*4),d2
  1534.  
  1535.  tst.b d2
  1536.  blt.s .justbright
  1537.  move.w d2,d3
  1538.  lsr.w #8,d3
  1539.  tst.b d3
  1540.  beq.s .justbright
  1541.  
  1542.  move.w d3,d4
  1543.  and.w #$f,d3
  1544.  lsr.w #4,d4
  1545.  add.w #1,d4
  1546.  
  1547.  move.l #BrightAnimTable,a0
  1548.  move.w -2(a0,d3.w*2),d3
  1549.  ext.w d2
  1550.  sub.w d2,d3
  1551.  muls d4,d3
  1552.  asr.w #4,d3
  1553.  add.w d3,d2
  1554.  
  1555. .justbright:
  1556.  ext.w d2
  1557.  
  1558.  move.w d2,(a3,d0.w*4)
  1559.  move.w 2(a2,d0.w*4),d2
  1560.  
  1561.  tst.b d2
  1562.  blt.s .justbright2
  1563.  move.w d2,d3
  1564.  lsr.w #8,d3
  1565.  tst.b d3
  1566.  beq.s .justbright2
  1567.  
  1568.  move.w d3,d4
  1569.  and.w #$f,d3
  1570.  lsr.w #4,d4
  1571.  add.w #1,d4
  1572.  
  1573.  move.l #BrightAnimTable,a0
  1574.  move.w -2(a0,d3.w*2),d3
  1575.  ext.w d2
  1576.  sub.w d2,d3
  1577.  muls d4,d3
  1578.  asr.w #4,d3
  1579.  add.w d3,d2
  1580.  
  1581. .justbright2:
  1582.  ext.w d2
  1583.  
  1584.  move.w d2,2(a3,d0.w*4)
  1585.  
  1586.  bra.s justtheone
  1587.  
  1588. whythehell:
  1589.  
  1590.  cmp.b #'n',mors
  1591.  beq nosee
  1592.  
  1593.  move.l PLR1_Roompt,FromRoom
  1594.  move.l PLR2_Roompt,ToRoom
  1595.  move.w p1_xoff,Viewerx
  1596.  move.w p1_zoff,Viewerz
  1597.  move.l p1_yoff,d0
  1598.  asr.l #7,d0
  1599.  move.w d0,Viewery
  1600.  move.w p2_xoff,Targetx
  1601.  move.w p2_zoff,Targetz
  1602.  move.l p2_yoff,d0
  1603.  asr.l #7,d0
  1604.  move.w d0,Targety
  1605.  move.b PLR1_StoodInTop,ViewerTop
  1606.  move.b PLR2_StoodInTop,TargetTop
  1607.  jsr CanItBeSeen
  1608.  
  1609.  move.l PLR1_Obj,a0
  1610.  move.b CanSee,d0
  1611.  and.b #2,d0
  1612.  move.b d0,17(a0)
  1613.  move.l PLR2_Obj,a0
  1614.  move.b CanSee,d0
  1615.  and.b #1,d0
  1616.  move.b d0,17(a0)
  1617.  
  1618. nosee:
  1619.  
  1620.  move.l PLR1_Obj,a0
  1621.  move.b #5,16(a0)
  1622.  move.l PLR2_Obj,a0
  1623.  move.b #11,16(a0)
  1624.  
  1625.  move.w TempFrames,d0
  1626.  add.w d0,p1_holddown
  1627.  cmp.w #30,p1_holddown
  1628.  blt.s oklength
  1629.  move.w #30,p1_holddown
  1630. oklength:
  1631.  
  1632.  tst.b p1_fire
  1633.  bne.s okstillheld
  1634.  sub.w d0,p1_holddown
  1635.  bge.s okstillheld
  1636.  move.w #0,p1_holddown
  1637.  
  1638. okstillheld:
  1639.  
  1640.  move.w TempFrames,d0
  1641.  add.w d0,p2_holddown
  1642.  
  1643.  cmp.w #30,p2_holddown
  1644.  blt.s oklength2
  1645.  move.w #30,p2_holddown
  1646. oklength2:
  1647.  
  1648.  
  1649.  tst.b p2_fire
  1650.  bne.s okstillheld2
  1651.  sub.w d0,p2_holddown
  1652.  bge.s okstillheld2
  1653.  move.w #0,p2_holddown
  1654. okstillheld2:
  1655.  
  1656. ; move.l #PLR1_GunData,a1
  1657. ; move.w p1_holddown,d0
  1658. ; move.w #50,10+32*3(a1)
  1659. ; move.l #PLR2_GunData,a1
  1660. ; move.w p2_holddown,d0
  1661. ; move.w #50,10+32*3(a1)
  1662.  
  1663.  
  1664. ******************************************
  1665. ******************************************
  1666.  
  1667.  move.w TempFrames,d1
  1668.  bgt.s noze
  1669.  moveq #1,d1
  1670. noze:
  1671.  
  1672.  move.w PLR1_xoff,d0
  1673.  sub.w OLDX1,d0
  1674.  asl.w #4,d0
  1675.  ext.l d0
  1676.  divs d1,d0
  1677.  move.w d0,XDIFF1
  1678.  move.w PLR2_xoff,d0
  1679.  sub.w OLDX2,d0
  1680.  asl.w #4,d0
  1681.  ext.l d0
  1682.  divs d1,d0
  1683.  move.w d0,XDIFF2
  1684.  move.w PLR1_zoff,d0
  1685.  sub.w OLDZ1,d0
  1686.  asl.w #4,d0
  1687.  ext.l d0
  1688.  divs d1,d0
  1689.  move.w d0,ZDIFF1
  1690.  move.w PLR2_zoff,d0
  1691.  sub.w OLDZ2,d0
  1692.  asl.w #4,d0
  1693.  ext.l d0
  1694.  divs d1,d0
  1695.  move.w d0,ZDIFF2
  1696.  
  1697.  cmp.b #'s',mors
  1698.  beq.s ImPlayer2OhYesIAm
  1699.  bsr USEPLR1
  1700.  bra IWasPlayer1
  1701.  
  1702. ImPlayer2OhYesIAm:
  1703.  bsr USEPLR2
  1704. IWasPlayer1:
  1705.  
  1706.  
  1707.  cmp.b #'s',mors
  1708.  beq drawplayer2
  1709.  
  1710.  move.w #0,scaleval
  1711.  
  1712.  move.l PLR1_xoff,xoff
  1713.  move.l PLR1_yoff,yoff
  1714.  move.l PLR1_zoff,zoff
  1715.  move.w PLR1_angpos,angpos
  1716.  move.w PLR1_cosval,cosval
  1717.  move.w PLR1_sinval,sinval
  1718.  
  1719.  
  1720.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1721.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1722.  move.l PLR1_Roompt,Roompt
  1723.  
  1724.  bsr OrderZones
  1725.  jsr objmoveanim
  1726.  bsr EnergyBar
  1727.  bsr AmmoBar
  1728.  
  1729.  move.w #0,leftclip
  1730.  move.w #96,rightclip
  1731.  move.w #0,deftopclip
  1732.  
  1733.  move.w #79,defbotclip
  1734.  move.w #0,topclip
  1735.  move.w #79,botclip
  1736. ; sub.l #10*104*4,frompt
  1737. ; sub.l #10*104*4,midpt
  1738.  
  1739. * Subroom loop
  1740.  
  1741.  
  1742.  bsr DrawDisplay 
  1743.  
  1744.  bra nodrawp2
  1745.  
  1746. drawplayer2
  1747.  
  1748.  move.w #0,scaleval
  1749.  move.l PLR2_xoff,xoff
  1750.  move.l PLR2_yoff,yoff
  1751.  move.l PLR2_zoff,zoff
  1752.  move.w PLR2_angpos,angpos
  1753.  move.w PLR2_cosval,cosval
  1754.  move.w PLR2_sinval,sinval 
  1755.  
  1756.  
  1757.  
  1758.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1759.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1760.  move.l PLR2_Roompt,Roompt
  1761.  
  1762.  bsr OrderZones
  1763.  jsr objmoveanim
  1764.  bsr EnergyBar
  1765.  bsr AmmoBar
  1766.  
  1767.  move.w #0,leftclip
  1768.  move.w #96,rightclip
  1769.  move.w #0,deftopclip
  1770.  move.w #79,defbotclip
  1771.  move.w #0,topclip
  1772.  move.w #79,botclip
  1773.  
  1774.  bsr DrawDisplay
  1775.  
  1776. nodrawp2:
  1777.  
  1778. ***************************************** 
  1779. * Copy from copbuff to chip ram
  1780.  
  1781.  
  1782. ; move.l drawpt,a3
  1783. ; adda.w #10,a3
  1784. ; move.l COPSCRNBUFF,a2
  1785. ; move.w #2,d6
  1786. ; adda.w #10,a2
  1787. ;COPYOUT
  1788. ; move.w #31,d0
  1789. ;COPYDOWN1:
  1790. ; move.w #3,d1
  1791. ; move.l a2,a4
  1792. ; move.l a3,a5
  1793. ;.inlop1:
  1794. ;val SET 0
  1795. ; REPT 20
  1796. ; move.w val(a4),val(a5)
  1797. ;val SET val+104*4
  1798. ; ENDR
  1799. ; adda.l #104*4*20,a4
  1800. ; adda.l #104*4*20,a5
  1801. ; dbra d1,.inlop1
  1802. ; addq #4,a2
  1803. ; addq #4,a3
  1804. ; dbra d0,COPYDOWN1
  1805. ; addq #4,a2
  1806. ; addq #4,a3
  1807. ; dbra d6,COPYOUT 
  1808.  
  1809.  
  1810. ***************************************** 
  1811.  move.l PLR2_Roompt,a0
  1812.  move.l #WorkSpace,a1
  1813.  clr.l (a1)
  1814.  clr.l 4(a1)
  1815.  clr.l 8(a1)
  1816.  clr.l 12(a1)
  1817.  clr.l 16(a1)
  1818.  clr.l 20(a1)
  1819.  clr.l 24(a1)
  1820.  clr.l 28(a1)
  1821.  
  1822.  cmp.b #'n',mors
  1823.  beq.s plr1only
  1824.  
  1825.  lea ToListOfGraph(a0),a0
  1826. .doallrooms:
  1827.  move.w (a0),d0
  1828.  blt.s .allroomsdone
  1829.  addq #8,a0
  1830.  move.w d0,d1
  1831.  asr.w #3,d0
  1832.  bset d1,(a1,d0.w)
  1833.  bra .doallrooms
  1834. .allroomsdone:
  1835.  
  1836. plr1only:
  1837.  
  1838.  move.l PLR1_Roompt,a0
  1839.  lea ToListOfGraph(a0),a0
  1840. .doallrooms2:
  1841.  move.w (a0),d0
  1842.  blt.s .allroomsdone2
  1843.  addq #8,a0
  1844.  move.w d0,d1
  1845.  asr.w #3,d0
  1846.  bset d1,(a1,d0.w)
  1847.  bra .doallrooms2
  1848. .allroomsdone2:
  1849.  
  1850.  move.l ObjectData,a0
  1851.  sub.w #64,a0
  1852. .doallobs:
  1853.  add.w #64,a0
  1854.  move.w (a0),d0
  1855.  blt.s .allobsdone
  1856.  move.w 12(a0),d0
  1857.  blt.s .doallobs
  1858.  move.w d0,d1
  1859.  asr.w #3,d0
  1860.  btst d1,(a1,d0.w)
  1861.  beq.s .doallobs
  1862.  or.b #127,worry(a0)
  1863.  bra.s .doallobs
  1864. .allobsdone:
  1865.  
  1866.  
  1867.  
  1868. ; move.l #brightentab,a0
  1869. ; move.l frompt,a3
  1870. ; adda.w #(4*33)+(104*4*20),a3
  1871. ; move.w #20,d7
  1872. ; move.w #20,d6
  1873. ;horl:
  1874. ; move.w d6,d5
  1875. ; move.l a3,a1
  1876. ;vertl
  1877. ; move.w (a1),d0
  1878. ; move.w (a0,d0.w*2),(a1)
  1879. ; addq #4,a1
  1880. ; dbra d5,vertl
  1881. ; adda.w #104*4,a3
  1882. ; dbra d7,horl
  1883.  
  1884.  move.l #$dff000,a6
  1885.  
  1886. ; move.w #$300,col0(a6)
  1887.  
  1888.  move.l #KeyMap,a5
  1889.  tst.b $45(a5)
  1890.  beq.s noend
  1891.  
  1892.  cmp.b #'s',mors
  1893.  beq plr2quit 
  1894.  
  1895.  st MASTERQUITTING
  1896.  bra noend
  1897.  
  1898. plr2quit:
  1899.  st SLAVEQUITTING
  1900. noend:
  1901.  
  1902.  tst.b MASTERQUITTING
  1903.  beq.s .noquit
  1904.  tst.b SLAVEQUITTING
  1905.  bne endnomusic
  1906. .noquit
  1907.  
  1908.  cmp.b #'n',mors
  1909.  bne.s .noexit
  1910.  move.l PLR1_Roompt,a0
  1911.  move.w (a0),d0
  1912.  move.w PLOPT,d1
  1913.  move.l #ENDZONES,a0
  1914.  cmp.w (a0,d1.w*2),d0
  1915.  beq end
  1916. .noexit:
  1917.  
  1918.  tst.w PLR1_energy
  1919.  ble end
  1920.  tst.w PLR2_energy
  1921.  ble end
  1922.  
  1923. ; move.l SwitchData,a0
  1924. ; tst.b 24+8(a0)
  1925. ; bne end
  1926.   
  1927.  JSR STOPTIMER
  1928.  
  1929.  bra lop
  1930.  
  1931. MASTERQUITTING: dc.b 0
  1932. SLAVEQUITTING: dc.b 0
  1933. MASTERPAUSE: dc.b 0
  1934. SLAVEPAUSE: dc.b 0
  1935.  
  1936. PAUSEOPTS:
  1937.  include "ab3:source/pauseopts"
  1938.  
  1939. ENDZONES:
  1940. ; LEVEL 1
  1941.  dc.w 132
  1942. ; LEVEL 2
  1943.  dc.w 149
  1944. ; LEVEL 3
  1945.  dc.w 155
  1946. ; LEVEL 4
  1947.  dc.w 107
  1948. ; LEVEL 5
  1949.  dc.w 67
  1950. ; LEVEL 6
  1951.  dc.w 132
  1952. ; LEVEL 7
  1953.  dc.w 203
  1954. ; LEVEL 8
  1955.  dc.w 166
  1956. ; LEVEL 9
  1957.  dc.w 118
  1958. ; LEVEL 10
  1959.  dc.w 102
  1960. ; LEVEL 11
  1961.  dc.w 103
  1962. ; LEVEL 12
  1963.  dc.w 2
  1964. ; LEVEL 13
  1965.  dc.w 98
  1966. ; LEVEL 14
  1967.  dc.w 0
  1968. ; LEVEL 15
  1969.  dc.w 148
  1970. ; LEVEL 16
  1971.  dc.w 103
  1972.  
  1973. ***************************************************************************
  1974. ***************************************************************************
  1975. ****************** End of Main Loop here ********************************** 
  1976. ***************************************************************************
  1977. ***************************************************************************
  1978.  
  1979. putinsmallscr:
  1980.  move.l #$1fe0000,statskip
  1981.  move.l #$1fe0000,statskip+4
  1982.  
  1983.  move.l #healthpal,a5
  1984.  move.l COPSCRN1,a0
  1985.  move.l COPSCRN2,a2
  1986.  move.w #scrheight-1,d0
  1987.  move.l #0,d6
  1988.  move.w #0,d3
  1989.  move.w #$2bdf,startwait
  1990.  move.w #$2d01,endwait
  1991. .fillcop
  1992.  move.w #$180,d1
  1993.  
  1994.  move.l a0,a1
  1995.  move.l a2,a3
  1996.  move.w #$10c,(a1)+
  1997.  move.w #$10c,(a3)+
  1998.  move.w d3,(a1)+
  1999.  move.w d3,(a3)+
  2000.  eor.w #$8000,d3
  2001.  
  2002.  move.w #$106,(a1)+
  2003.  move.w #$106,(a3)+
  2004.  move.w #$2c42,d5
  2005.  or.w d3,d5
  2006.  and.w #$fffe,d5
  2007.  move.w d5,(a1)+
  2008.  move.w d5,(a3)+
  2009.  bsr do32
  2010.  
  2011.  move.w #$106,(a1)+
  2012.  move.w #$106,(a3)+
  2013.  move.w #$4c42,d5
  2014.  or.w d3,d5
  2015.  and.w #$fffe,d5
  2016.  move.w d5,(a1)+
  2017.  move.w d5,(a3)+
  2018.  bsr do32
  2019.  
  2020.  move.w #$106,(a1)+
  2021.  move.w #$106,(a3)+
  2022.  move.w #$6c42,d5
  2023.  or.w d3,d5
  2024.  and.w #$fffe,d5
  2025.  move.w d5,(a1)+
  2026.  move.w d5,(a3)+
  2027.  bsr do32
  2028.  
  2029.  
  2030.  move.l #$1060c42,(a1)+
  2031.  move.l #$1060c42,(a3)+
  2032.  move.w #$19e,(a1)+
  2033.  move.w (a5),(a1)+
  2034.  move.w #$19e,(a3)+
  2035.  move.w (a5)+,(a3)+
  2036.  
  2037. **********************************
  2038.  
  2039.  adda.w #104*4,a0
  2040.  adda.w #104*4,a2
  2041.  dbra d0,.fillcop
  2042.  
  2043.  move.w #$48,fetchstart
  2044.  move.w #$88,fetchstop
  2045.  move.w #$2cb1,winstart
  2046.  move.w #$2c91,winstop
  2047.  move.w #-24,modulo
  2048.  move.w #-24,modulo+4
  2049.  
  2050.  move.l #nullspr,d0
  2051.  move.w d0,s4l
  2052.  move.w d0,s5l
  2053.  move.w d0,s6l
  2054.  move.w d0,s7l
  2055.  swap d0
  2056.  move.w d0,s4h
  2057.  move.w d0,s5h
  2058.  move.w d0,s6h
  2059.  move.w d0,s7h 
  2060.  
  2061.  move.l #borders,d0
  2062.  move.w d0,s0l
  2063.  swap d0
  2064.  move.w d0,s0h
  2065.  move.l #borders+2592,d0
  2066.  move.w d0,s1l
  2067.  swap d0
  2068.  move.w d0,s1h
  2069.  move.l #borders+2592*2,d0
  2070.  move.w d0,s2l
  2071.  swap d0
  2072.  move.w d0,s2h
  2073.  move.l #borders+2592*3,d0
  2074.  move.w d0,s3l
  2075.  swap d0
  2076.  move.w d0,s3h
  2077.  
  2078.  
  2079.  move.l #scrn+40,a0
  2080.  move.l #scrn+160,a1
  2081.  move.l #scrn+280,a2
  2082.  move.l #smallscrntab,a3
  2083.  move.w #191,d7    ; counter
  2084.  move.w #0,d1    ; xpos
  2085. .plotscrnloop:
  2086.  move.b (a3)+,d0
  2087.  move.w d1,d2
  2088.  asr.w #3,d2
  2089.  move.b d1,d3
  2090.  not.b d3
  2091.  bclr.b d3,-40(a0,d2.w)
  2092.  bclr.b d3,(a0,d2.w)
  2093.  bclr.b d3,40(a0,d2.w)
  2094.  bclr.b d3,-40(a1,d2.w)
  2095.  bclr.b d3,(a1,d2.w)
  2096.  bclr.b d3,40(a1,d2.w)
  2097.  bclr.b d3,-40(a2,d2.w)
  2098.  btst #0,d0
  2099.  beq.s .nobp1
  2100.  bset.b d3,-40(a0,d2.w)
  2101. .nobp1:
  2102.  btst #1,d0
  2103.  beq.s .nobp2
  2104.  bset.b d3,(a0,d2.w)
  2105. .nobp2:
  2106.  btst #2,d0
  2107.  beq.s .nobp3
  2108.  bset.b d3,40(a0,d2.w)
  2109. .nobp3:
  2110.  btst #3,d0
  2111.  beq.s .nobp4
  2112.  bset.b d3,-40(a1,d2.w)
  2113. .nobp4:
  2114.  btst #4,d0
  2115.  beq.s .nobp5
  2116.  bset.b d3,(a1,d2.w)
  2117. .nobp5:
  2118.  btst #5,d0
  2119.  beq.s .nobp6
  2120.  bset.b d3,40(a1,d2.w)
  2121. .nobp6:
  2122.  btst #6,d0
  2123.  beq.s .nobp7
  2124.  bset.b d3,-40(a2,d2.w)
  2125. .nobp7:
  2126.  
  2127.  addq #1,d1
  2128.  
  2129.  dbra d7,.plotscrnloop
  2130.  
  2131.  
  2132.  rts
  2133.  
  2134. putinlargescr:
  2135.  
  2136.  move.l #$1000000,statskip
  2137.  move.l #$fffffffe,statskip+4
  2138.  
  2139.  move.l #healthpal,a5
  2140.  move.l COPSCRN1,a0
  2141.  move.l COPSCRN2,a2
  2142.  move.w #scrheight-1,d0
  2143.  move.l #0,d6
  2144.  move.w #0,d3
  2145.  move.w #$29df,startwait
  2146.  move.w #$2b01,endwait
  2147. .fillcop
  2148.  move.w #$180,d1
  2149.  
  2150.  move.l a0,a1
  2151.  move.l a2,a3
  2152.  move.w #$10c,(a1)+
  2153.  move.w #$10c,(a3)+
  2154.  move.w d3,(a1)+
  2155.  move.w d3,(a3)+
  2156.  eor.w #$8000,d3
  2157.  
  2158.  move.w #$106,(a1)+
  2159.  move.w #$106,(a3)+
  2160.  move.w #$2c42,d5
  2161.  or.w d3,d5
  2162.  and.w #$fffe,d5
  2163.  move.w d5,(a1)+
  2164.  move.w d5,(a3)+
  2165.  bsr do32
  2166.  
  2167.  move.w #$106,(a1)+
  2168.  move.w #$106,(a3)+
  2169.  move.w #$4c42,d5
  2170.  or.w d3,d5
  2171.  and.w #$fffe,d5
  2172.  move.w d5,(a1)+
  2173.  move.w d5,(a3)+
  2174.  bsr do32
  2175.  
  2176.  move.w #$106,(a1)+
  2177.  move.w #$106,(a3)+
  2178.  move.w #$6c42,d5
  2179.  or.w d3,d5
  2180.  and.w #$fffe,d5
  2181.  move.w d5,(a1)+
  2182.  move.w d5,(a3)+
  2183.  bsr do32
  2184.  
  2185.  move.w startwait,(a1)+
  2186.  move.w #$fffe,(a1)+
  2187.  move.w endwait,(a1)+
  2188.  move.w #$ff00,(a1)+
  2189.  move.w startwait,(a3)+
  2190.  move.w #$fffe,(a3)+
  2191.  move.w endwait,(a3)+
  2192.  move.w #$ff00,(a3)+
  2193.  
  2194. ; move.l $1fe0000,(a1)+
  2195. ; move.l $1fe0000,(a3)+
  2196. ; move.l $1fe0000,(a1)+
  2197. ; move.l $1fe0000,(a3)+
  2198.  
  2199.  
  2200.  add.w #$300,startwait
  2201.  add.w #$300,endwait
  2202.  
  2203. ; move.l #$1060c42,(a1)+
  2204. ; move.l #$1060c42,(a3)+
  2205. ; move.w #$19e,(a1)+
  2206. ; move.w (a5),(a1)+
  2207. ; move.w #$19e,(a3)+
  2208. ; move.w (a5)+,(a3)+
  2209.  
  2210. **********************************
  2211.  
  2212.  adda.w #104*4,a0
  2213.  adda.w #104*4,a2
  2214.  dbra d0,.fillcop
  2215.  
  2216.  move.w #$38,fetchstart
  2217.  move.w #$b8,fetchstop
  2218.  move.w #$2c81,winstart
  2219.  move.w #$2cc1,winstop
  2220.  move.w #-40,modulo
  2221.  move.w #-40,modulo+4
  2222.  
  2223.  move.l #nullspr,d0
  2224.  move.w d0,s0l
  2225.  move.w d0,s1l
  2226.  move.w d0,s2l
  2227.  move.w d0,s3l
  2228.  move.w d0,s4l
  2229.  move.w d0,s5l
  2230.  move.w d0,s6l
  2231.  move.w d0,s7l
  2232.  swap d0
  2233.  move.w d0,s0h
  2234.  move.w d0,s1h
  2235.  move.w d0,s2h
  2236.  move.w d0,s3h
  2237.  move.w d0,s4h
  2238.  move.w d0,s5h
  2239.  move.w d0,s6h
  2240.  move.w d0,s7h 
  2241.  
  2242.  move.l #scrn+40,a0
  2243.  move.l #scrn+160,a1
  2244.  move.l #scrn+280,a2
  2245.  move.l #scrntab,a3
  2246.  move.w #319,d7    ; counter
  2247.  move.w #0,d1    ; xpos
  2248. .plotscrnloop:
  2249.  move.b (a3)+,d0
  2250.  move.w d1,d2
  2251.  asr.w #3,d2
  2252.  move.b d1,d3
  2253.  not.b d3
  2254.  bclr.b d3,-40(a0,d2.w)
  2255.  bclr.b d3,(a0,d2.w)
  2256.  bclr.b d3,40(a0,d2.w)
  2257.  bclr.b d3,-40(a1,d2.w)
  2258.  bclr.b d3,(a1,d2.w)
  2259.  bclr.b d3,40(a1,d2.w)
  2260.  bclr.b d3,-40(a2,d2.w)
  2261.  btst #0,d0
  2262.  beq.s .nobp1
  2263.  bset.b d3,-40(a0,d2.w)
  2264. .nobp1:
  2265.  btst #1,d0
  2266.  beq.s .nobp2
  2267.  bset.b d3,(a0,d2.w)
  2268. .nobp2:
  2269.  btst #2,d0
  2270.  beq.s .nobp3
  2271.  bset.b d3,40(a0,d2.w)
  2272. .nobp3:
  2273.  btst #3,d0
  2274.  beq.s .nobp4
  2275.  bset.b d3,-40(a1,d2.w)
  2276. .nobp4:
  2277.  btst #4,d0
  2278.  beq.s .nobp5
  2279.  bset.b d3,(a1,d2.w)
  2280. .nobp5:
  2281.  btst #5,d0
  2282.  beq.s .nobp6
  2283.  bset.b d3,40(a1,d2.w)
  2284. .nobp6:
  2285.  btst #6,d0
  2286.  beq.s .nobp7
  2287.  bset.b d3,-40(a2,d2.w)
  2288. .nobp7:
  2289.  
  2290.  addq #1,d1
  2291.  
  2292.  dbra d7,.plotscrnloop
  2293.  
  2294.  rts
  2295.  
  2296. CLEARKEYBOARD:
  2297.  move.l #KeyMap,a5
  2298.  moveq #0,d0
  2299.  move.w #15,d1
  2300. clrloo:
  2301.  move.l d0,(a5)+
  2302.  move.l d0,(a5)+
  2303.  move.l d0,(a5)+
  2304.  move.l d0,(a5)+
  2305.  dbra d1,clrloo
  2306.  rts
  2307.  
  2308. READCONTROLS: dc.w 0
  2309.  
  2310. tstststst: dc.w 0
  2311.  
  2312. BollocksRoom:
  2313.  dc.w -1
  2314.  ds.l 50
  2315.  
  2316. GUNYOFFS:
  2317.  dc.w 20
  2318.  dc.w 20
  2319.  dc.w 0
  2320.  dc.w 20
  2321.  dc.w 20
  2322.  dc.w 0
  2323.  dc.w 0
  2324.  dc.w 20
  2325.  
  2326. USEPLR1:
  2327.  
  2328. ***********************************
  2329.  
  2330.  move.l PLR1_Obj,a0 
  2331.  move.l ObjectPoints,a1
  2332.  move.l #ObjRotated,a2
  2333.  move.w (a0),d0
  2334.  move.l PLR1_xoff,(a1,d0.w*8)
  2335.  move.l PLR1_zoff,4(a1,d0.w*8)
  2336.  move.l PLR1_Roompt,a1
  2337.  
  2338.  moveq #0,d2
  2339.  move.b damagetaken(a0),d2
  2340.  beq .notbeenshot
  2341.  move.w #$f00,hitcol
  2342.  move.w #$f00,hitcol2
  2343.  sub.w d2,PLR1_energy
  2344.  movem.l d0-d7/a0-a6,-(a7)
  2345.  move.b #$fb,IDNUM
  2346.  move.w #19,Samplenum
  2347.  clr.b notifplaying
  2348.  move.w #0,Noisex
  2349.  move.w #0,Noisez
  2350.  move.w #100,Noisevol
  2351.  jsr MakeSomeNoise
  2352.  
  2353.  movem.l (a7)+,d0-d7/a0-a6
  2354.  
  2355. .notbeenshot
  2356.  move.b #0,damagetaken(a0)
  2357.  move.b PLR1_energy+1,numlives(a0)
  2358.  
  2359.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2360.  
  2361.  move.w (a1),12(a0)
  2362.  move.w (a1),GraphicRoom(a0)
  2363.  move.w (a1),d2
  2364.  move.l #ZoneBrightTable,a1
  2365.  move.l (a1,d2.w*4),d2
  2366.  tst.b PLR1_StoodInTop
  2367.  bne.s .okinbott
  2368.  swap d2
  2369. .okinbott:
  2370.  
  2371.  move.w d2,2(a0)
  2372.  
  2373.  move.l p1_yoff,d0
  2374.  move.l p1_height,d1
  2375.  asr.l #1,d1
  2376.  add.l d1,d0
  2377.  asr.l #7,d0
  2378.  move.w d0,4(a0)
  2379.  
  2380. ***********************************
  2381.  
  2382.  move.l PLR2_Obj,a0 
  2383.  
  2384.  move.w PLR2_angpos,d0
  2385.  and.w #8190,d0
  2386.  move.w d0,Facing(a0)
  2387.  
  2388.  jsr ViewpointToDraw
  2389.  asl.w #2,d0
  2390.  moveq #0,d1
  2391.  move.b p2_bobble,d1
  2392.  not.b d1
  2393.  lsr.b #3,d1
  2394.  and.b #$3,d1
  2395.  add.w d1,d0
  2396.  move.w d0,10(a0)
  2397.  move.w #10,8(a0)
  2398.  
  2399.  move.l ObjectPoints,a1
  2400.  move.l #ObjRotated,a2
  2401.  move.w (a0),d0
  2402.  move.l PLR2_xoff,(a1,d0.w*8)
  2403.  move.l PLR2_zoff,4(a1,d0.w*8)
  2404.  move.l PLR2_Roompt,a1
  2405.  
  2406.  moveq #0,d2
  2407.  move.b damagetaken(a0),d2
  2408.  beq .notbeenshot2
  2409.  sub.w d2,PLR2_energy
  2410. .notbeenshot2
  2411.  move.b #0,damagetaken(a0)
  2412.  move.b PLR2_energy+1,numlives(a0)
  2413.  
  2414.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2415.  
  2416.  move.w (a1),12(a0)
  2417.  move.w (a1),GraphicRoom(a0)
  2418.  move.w (a1),d2
  2419.  move.l #ZoneBrightTable,a1
  2420.  move.l (a1,d2.w*4),d2
  2421.  tst.b PLR2_StoodInTop
  2422.  bne.s .okinbott2
  2423.  swap d2
  2424. .okinbott2:
  2425.  
  2426.  move.w d2,2(a0)
  2427.  
  2428.  move.l p2_yoff,d0
  2429.  move.l p2_height,d1
  2430.  asr.l #1,d1
  2431.  add.l d1,d0
  2432.  asr.l #7,d0
  2433.  move.w d0,4(a0)
  2434.  
  2435. **********************************
  2436.  
  2437.  
  2438.  move.l PLR1_Obj,a0
  2439.  move.w #-1,12+128(a0)
  2440.  
  2441.  rts
  2442.  
  2443. DRAWINGUN:
  2444.  move.l #Objects+9*16,a0
  2445.  move.l 4(a0),a5    ; ptr
  2446.  move.l 8(a0),a2    ; frames
  2447.  move.l 12(a0),a4    ; pal
  2448.  move.l (a0),a0        ; wad
  2449.  
  2450.  move.l #GunAnims,a1
  2451.  move.l (a1,d0.w*8),a1
  2452.  move.w (a1,d1.w*2),d5    ; frame of anim
  2453.  
  2454.  move.l #GUNYOFFS,a1
  2455.  move.w (a1,d0.w*2),d7    ; yoff
  2456.  move.l frompt,a6
  2457.  move.w d7,d6
  2458.  muls #104*4,d6
  2459.  add.l d6,a6    ; screen pointer
  2460.  
  2461.  asl.w #2,d0
  2462.  add.w d5,d0    ; frame
  2463.  move.w (a2,d0.w*4),d1    ; xoff
  2464.  
  2465.  lea (a5,d1.w),a5    ; right ptr
  2466.  
  2467.  move.w #31,d0
  2468.  bsr DRAWCHUNK
  2469.  addq.w #4,a6
  2470.  move.w #31,d0
  2471.  bsr DRAWCHUNK
  2472.  addq.w #4,a6
  2473.  move.w #31,d0
  2474.  bsr DRAWCHUNK
  2475.  rts
  2476.  
  2477.  
  2478. DRAWCHUNK:
  2479.  move.w #78,d3
  2480.  sub.w d7,d3
  2481.  move.l a6,a3
  2482.  move.b (a5),d2
  2483.  move.l (a5)+,d1
  2484.  bne.s .noblank
  2485.  addq #4,a6
  2486.  dbra d0,DRAWCHUNK 
  2487.  rts
  2488.  
  2489. .noblank:
  2490.  and.l #$ffffff,d1
  2491.  lea (a0,d1.l),a1
  2492.  cmp.b #1,d2
  2493.  bgt.s thirdd
  2494.  beq.s secc
  2495. .drawdown:
  2496.  move.w (a1)+,d2
  2497.  and.w #%11111,d2
  2498.  beq.s .itsblank
  2499.  move.w (a4,d2.w*2),(a3)
  2500. .itsblank
  2501.  add.w #104*4,a3
  2502.  dbra d3,.drawdown
  2503.  
  2504.  addq #4,a6
  2505.  dbra d0,DRAWCHUNK
  2506.  rts
  2507.  
  2508. secc:
  2509. .drawdown:
  2510.  move.w (a1)+,d2
  2511.  lsr.w #5,d2
  2512.  and.w #%11111,d2
  2513.  beq.s .itsblank
  2514.  move.w (a4,d2.w*2),(a3)
  2515. .itsblank
  2516.  add.w #104*4,a3
  2517.  dbra d3,.drawdown
  2518.  
  2519.  addq #4,a6
  2520.  dbra d0,DRAWCHUNK
  2521.  rts
  2522.  
  2523. thirdd:
  2524. .drawdown:
  2525.  move.b (a1),d2
  2526.  addq #2,a1
  2527.  lsr.b #2,d2
  2528.  and.w #%11111,d2
  2529.  beq.s .itsblank
  2530.  move.w (a4,d2.w*2),(a3)
  2531. .itsblank
  2532.  add.w #104*4,a3
  2533.  dbra d3,.drawdown
  2534.  
  2535.  addq #4,a6
  2536.  dbra d0,DRAWCHUNK
  2537.  rts
  2538.  
  2539.  
  2540.  
  2541. ***************************************************
  2542. **************************************************
  2543.  
  2544. USEPLR2:
  2545.  
  2546. ***********************************
  2547.  
  2548.  move.l PLR2_Obj,a0 
  2549.  move.l ObjectPoints,a1
  2550.  move.l #ObjRotated,a2
  2551.  move.w (a0),d0
  2552.  move.l PLR2_xoff,(a1,d0.w*8)
  2553.  move.l PLR2_zoff,4(a1,d0.w*8)
  2554.  move.l PLR2_Roompt,a1
  2555.  
  2556.  moveq #0,d2
  2557.  move.b damagetaken(a0),d2
  2558.  beq .notbeenshot
  2559.  move.w #$f00,hitcol
  2560.  move.w #$f00,hitcol2
  2561.  sub.w d2,PLR2_energy
  2562.  movem.l d0-d7/a0-a6,-(a7)
  2563.  move.w #19,Samplenum
  2564.  clr.b notifplaying
  2565.  move.b #$fb,IDNUM
  2566.  move.w #0,Noisex
  2567.  move.w #0,Noisez
  2568.  move.w #100,Noisevol
  2569.  jsr MakeSomeNoise
  2570.  
  2571.  movem.l (a7)+,d0-d7/a0-a6
  2572.  
  2573. .notbeenshot
  2574.  move.b #0,damagetaken(a0)
  2575.  move.b PLR2_energy+1,numlives(a0)
  2576.  
  2577.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2578.  
  2579.  move.w (a1),12(a0)
  2580.  move.w (a1),GraphicRoom(a0)
  2581.  move.w (a1),d2
  2582.  move.l #ZoneBrightTable,a1
  2583.  move.l (a1,d2.w*4),d2
  2584.  tst.b PLR2_StoodInTop
  2585.  bne.s .okinbott
  2586.  swap d2
  2587. .okinbott:
  2588.  
  2589.  move.w d2,2(a0)
  2590.  
  2591.  move.l p2_yoff,d0
  2592.  move.l p2_height,d1
  2593.  asr.l #1,d1
  2594.  add.l d1,d0
  2595.  asr.l #7,d0
  2596.  move.w d0,4(a0)
  2597.  
  2598. ***********************************
  2599.  
  2600.  move.l PLR1_Obj,a0 
  2601.  
  2602.  move.w PLR1_angpos,d0
  2603.  and.w #8190,d0
  2604.  move.w d0,Facing(a0)
  2605.  
  2606.  jsr ViewpointToDraw
  2607.  asl.w #2,d0
  2608.  moveq #0,d1
  2609.  move.b p1_bobble,d1
  2610.  not.b d1
  2611.  lsr.b #3,d1
  2612.  and.b #$3,d1
  2613.  add.w d1,d0
  2614.  move.w d0,10(a0)
  2615.  move.w #10,8(a0)
  2616.  
  2617.  move.l ObjectPoints,a1
  2618.  move.l #ObjRotated,a2
  2619.  move.w (a0),d0
  2620.  move.l PLR1_xoff,(a1,d0.w*8)
  2621.  move.l PLR1_zoff,4(a1,d0.w*8)
  2622.  move.l PLR1_Roompt,a1
  2623.  
  2624.  moveq #0,d2
  2625.  move.b damagetaken(a0),d2
  2626.  beq .notbeenshot2
  2627.  sub.w d2,PLR1_energy
  2628. .notbeenshot2
  2629.  move.b #0,damagetaken(a0)
  2630.  move.b PLR1_energy+1,numlives(a0)
  2631.  
  2632.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2633.  
  2634.  move.w (a1),12(a0)
  2635.  move.w (a1),GraphicRoom(a0)
  2636.  move.w (a1),d2
  2637.  move.l #ZoneBrightTable,a1
  2638.  move.l (a1,d2.w*4),d2
  2639.  tst.b PLR1_StoodInTop
  2640.  bne.s .okinbott2
  2641.  swap d2
  2642. .okinbott2:
  2643.  
  2644.  move.w d2,2(a0)
  2645.  
  2646.  move.l p1_yoff,d0
  2647.  move.l p1_height,d1
  2648.  asr.l #1,d1
  2649.  add.l d1,d0
  2650.  asr.l #7,d0
  2651.  move.w d0,4(a0)
  2652.  
  2653. **********************************
  2654.  
  2655.  move.l PLR2_Obj,a0
  2656.  move.w #-1,12+64(a0)
  2657.  
  2658.  rts
  2659.  
  2660.  
  2661. GunSelected: dc.b 0
  2662.  even
  2663.  
  2664. GunAnims:
  2665.  dc.l MachineAnim,3
  2666.  dc.l PlasmaAnim,5
  2667.  dc.l RocketAnim,5
  2668.  dc.l FlameThrowerAnim,5
  2669.  dc.l GrenadeAnim,12
  2670.  dc.l 0,0
  2671.  dc.l 0,0
  2672.  dc.l ShotGunAnim,12+19+11+20+1
  2673.  
  2674. MachineAnim:
  2675.  dc.w 0,1,2,3
  2676. PlasmaAnim:
  2677.  dc.w 0,1,2,3,3,3
  2678. RocketAnim:
  2679.  dc.w 0,1,2,3,3,3
  2680. FlameThrowerAnim:
  2681.  dc.w 0,1,2,3,3,3
  2682. GrenadeAnim:
  2683.  dc.w 0,1,1,1,1
  2684.  dc.w 2,2,2,2,3
  2685.  dc.w 3,3,3
  2686. ShotGunAnim:
  2687.  dc.w 0
  2688.  dcb.w 12,2
  2689.  dcb.w 19,1
  2690.  dcb.w 11,2
  2691.  dcb.w 20,0
  2692.  dc.w 3
  2693.  
  2694. GunData: dc.l 0
  2695.  
  2696. PLR1_GunData:
  2697. ; 0=Pistol 1=Big Gun
  2698. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2699.  
  2700. ; VISIBLE/INSTANT (0/FF)
  2701. ; damage,gotgun(b)
  2702. ; Delay (w), Lifetime of bullet (w)
  2703. ; Click or hold down (0,1)
  2704. ; BulSpd: (w)
  2705.  
  2706. ;0
  2707.  dc.w 0
  2708. ;2
  2709.  dc.b 8,3
  2710. ;4
  2711.  dc.b 15
  2712. ;5
  2713.  dc.b -1
  2714. ;6
  2715.  dc.b 4,$ff
  2716. ;8
  2717.  dc.w 5,-1,1,0
  2718. ;16
  2719.  dc.w 0,0,0
  2720. ;22
  2721.  dc.w 1
  2722.  
  2723.  ds.w 4
  2724.  
  2725. ;PlasmaGun
  2726.  
  2727.  dc.w 0
  2728.  dc.b 8,1
  2729.  dc.b 20
  2730.  dc.b 0
  2731.  dc.b 16,0
  2732.  dc.w 10,-1,0,5
  2733.  dc.w 0,0,0
  2734.  dc.w 1
  2735.  
  2736.  ds.w 4
  2737.  
  2738. ;RocketLauncher
  2739.  
  2740.  dc.w 0
  2741.  dc.b 8,9
  2742.  dc.b 2
  2743.  dc.b 0
  2744.  dc.b 12,0
  2745.  dc.w 30,-1,0,5
  2746.  dc.w 0,0,0
  2747.  dc.w 1
  2748.  
  2749.  
  2750.  ds.w 4
  2751.  
  2752. ; FlameThrower
  2753.  
  2754.  dc.w 90*8
  2755.  dc.b 1,22
  2756.  dc.b 40
  2757.  dc.b 0
  2758.  dc.b 8,$0    
  2759.  dc.w 5,50,1,4
  2760.  dc.w 0,0,0
  2761.  dc.w 1
  2762.  
  2763.  ds.w 4
  2764.  
  2765. ;Grenade launcher
  2766.  
  2767.  
  2768.  dc.w 0
  2769.  dc.b 8,9
  2770.  dc.b 6
  2771.  dc.b 0
  2772.  dc.b 8,0
  2773.  dc.w 50,100,1,5
  2774.  dc.w 60,3
  2775.  dc.w -1000
  2776.  dc.w 1
  2777.  
  2778.  ds.w 4
  2779.  
  2780. ; WORMGUN
  2781.  
  2782.  dc.w 0
  2783.  dc.b 0,0
  2784.  dc.b 0
  2785.  dc.b 0,0
  2786.  dc.w 0,-1,0,5
  2787.  dc.w 0,0
  2788.  dc.w 0
  2789.  dc.w 1
  2790.  ds.w 4
  2791.  
  2792. ; ToughMarineGun
  2793.  
  2794.  dc.w 0
  2795.  dc.b 0,0
  2796.  dc.b 0
  2797.  dc.b 0,0
  2798.  dc.w 0,-1,0,5
  2799.  dc.w 0,0
  2800.  dc.w 0
  2801.  dc.w 1
  2802.  ds.w 4
  2803.  
  2804. ; Shotgun
  2805.  
  2806. ;0
  2807.  dc.w 0
  2808. ;2
  2809.  dc.b 8,21
  2810. ;4
  2811.  dc.b 15
  2812. ;5
  2813.  dc.b -1
  2814. ;6
  2815.  dc.b 4,0
  2816. ;8
  2817.  dc.w 50,-1,1,0
  2818. ;16
  2819.  dc.w 0,0,0
  2820. ;22
  2821.  dc.w 7
  2822.  
  2823.  ds.w 4
  2824.  
  2825. PLR2_GunData:
  2826. ; 0=Pistol 1=Big Gun
  2827. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2828.  
  2829. ; VISIBLE/INSTANT (0/FF)
  2830. ; damage,gotgun(b)
  2831. ; Delay (w)
  2832.  
  2833. ;0
  2834.  dc.w 0
  2835. ;2
  2836.  dc.b 8,3
  2837. ;4
  2838.  dc.b 15
  2839. ;5
  2840.  dc.b -1
  2841. ;6
  2842.  dc.b 4,$ff
  2843. ;8
  2844.  dc.w 5,-1,1,0
  2845. ;16
  2846.  dc.w 0,0,0
  2847. ;22
  2848.  dc.w 1
  2849.  
  2850.  ds.w 4
  2851.  
  2852. ;PlasmaGun
  2853.  
  2854.  dc.w 0
  2855.  dc.b 8,1
  2856.  dc.b 20
  2857.  dc.b 0
  2858.  dc.b 16,0
  2859.  dc.w 10,-1,0,5
  2860.  dc.w 0,0,0
  2861.  dc.w 1
  2862.  
  2863.  ds.w 4
  2864.  
  2865. ;RocketLauncher
  2866.  
  2867.  dc.w 0
  2868.  dc.b 8,9
  2869.  dc.b 2
  2870.  dc.b 0
  2871.  dc.b 12,0
  2872.  dc.w 30,-1,0,5
  2873.  dc.w 0,0,0
  2874.  dc.w 1
  2875.  
  2876.  
  2877.  ds.w 4
  2878.  
  2879. ; FlameThrower
  2880.  
  2881.  dc.w 90*8
  2882.  dc.b 1,22
  2883.  dc.b 40
  2884.  dc.b 0
  2885.  dc.b 8,$0    
  2886.  dc.w 5,50,1,4
  2887.  dc.w 0,0,0
  2888.  dc.w 1
  2889.  
  2890.  ds.w 4
  2891.  
  2892. ;Grenade launcher
  2893.  
  2894.  
  2895.  dc.w 0
  2896.  dc.b 8,9
  2897.  dc.b 6
  2898.  dc.b 0
  2899.  dc.b 8,0
  2900.  dc.w 50,100,1,5
  2901.  dc.w 60,3
  2902.  dc.w -1000
  2903.  dc.w 1
  2904.  
  2905.  ds.w 4
  2906.  
  2907. ; WORMGUN
  2908.  
  2909.  dc.w 0
  2910.  dc.b 0,0
  2911.  dc.b 0
  2912.  dc.b 0,0
  2913.  dc.w 0,-1,0,5
  2914.  dc.w 0,0
  2915.  dc.w 0
  2916.  dc.w 1
  2917.  ds.w 4
  2918.  
  2919. ; ToughMarineGun
  2920.  
  2921.  dc.w 0
  2922.  dc.b 0,0
  2923.  dc.b 0
  2924.  dc.b 0,0
  2925.  dc.w 0,-1,0,5
  2926.  dc.w 0,0
  2927.  dc.w 0
  2928.  dc.w 1
  2929.  ds.w 4
  2930.  
  2931. ; Shotgun
  2932.  
  2933. ;0
  2934.  dc.w 0
  2935. ;2
  2936.  dc.b 8,21
  2937. ;4
  2938.  dc.b 15
  2939. ;5
  2940.  dc.b -1
  2941. ;6
  2942.  dc.b 4,0
  2943. ;8
  2944.  dc.w 50,-1,1,0
  2945. ;16
  2946.  dc.w 0,0,0
  2947. ;22
  2948.  dc.w 7
  2949.  
  2950.  ds.w 4
  2951.  
  2952.  
  2953.  
  2954. protA: dc.w 0
  2955.  
  2956. Path:
  2957. ; incbin "testpath"
  2958. endpath:
  2959. pathpt: dc.l Path
  2960.  
  2961.  
  2962. PLR1KEYS: dc.b 0
  2963. PLR1PATH: dc.b 0
  2964. PLR1MOUSE: dc.b -1
  2965. PLR1JOY: dc.b 0
  2966. PLR2KEYS: dc.b 0
  2967. PLR2PATH: dc.b 0
  2968. PLR2MOUSE: dc.b -1
  2969. PLR2JOY: dc.b 0
  2970.  
  2971.  even
  2972.  
  2973. PLR1_bobble: dc.w 0
  2974. PLR2_bobble: dc.w 0
  2975. xwobble: dc.l 0
  2976. xwobxoff: dc.w 0
  2977.  
  2978. xwobzoff: dc.w 0
  2979.  
  2980. PLR1_Control:
  2981.  
  2982. ; Take a snapshot of everything.
  2983.  
  2984.  move.l PLR1_xoff,d2
  2985.  move.l d2,PLR1_oldxoff
  2986.  move.l d2,oldx
  2987.  move.l PLR1_zoff,d3
  2988.  move.l d3,PLR1_oldzoff
  2989.  move.l d3,oldz
  2990.  move.l p1_xoff,d0
  2991.  move.l d0,PLR1_xoff
  2992.  move.l d0,newx
  2993.  move.l p1_zoff,d1
  2994.  move.l d1,newz
  2995.  move.l d1,PLR1_zoff
  2996.  
  2997.  move.l p1_height,PLR1_height
  2998.  
  2999.  sub.l d2,d0
  3000.  sub.l d3,d1
  3001.  move.l d0,xdiff
  3002.  move.l d1,zdiff
  3003.  move.w p1_angpos,d0
  3004.  move.w d0,PLR1_angpos
  3005.  
  3006.  move.l #SineTable,a1
  3007.  move.w (a1,d0.w),PLR1_sinval
  3008.  add.w #2048,d0
  3009.  and.w #8190,d0
  3010.  move.w (a1,d0.w),PLR1_cosval
  3011.  
  3012.  move.l p1_yoff,d0
  3013.  move.w p1_bobble,d1
  3014.  move.w (a1,d1.w),d1
  3015.  move.w d1,d3
  3016.  ble.s notnegative
  3017.  neg.w d1
  3018. notnegative:
  3019.  add.w #16384,d1
  3020.  asr.w #4,d1
  3021.  
  3022.  tst.b PLR1_Ducked
  3023.  bne.s .notdouble
  3024.  add.w d1,d1
  3025. .notdouble
  3026.  ext.l d1
  3027.  move.l PLR1_height,d4
  3028.  sub.l d1,d4
  3029.  add.l d1,d0
  3030.  
  3031.  cmp.b #'s',mors
  3032.  beq.s .otherwob
  3033.  asr.w #6,d3
  3034.  ext.l d3
  3035.  move.l d3,xwobble
  3036.  move.w PLR1_sinval,d1
  3037.  muls d3,d1
  3038.  move.w PLR1_cosval,d2
  3039.  muls d3,d2
  3040.  swap d1
  3041.  swap d2
  3042.  asr.w #7,d1
  3043.  move.w d1,xwobxoff
  3044.  asr.w #7,d2
  3045.  neg.w d2
  3046.  move.w d2,xwobzoff
  3047. .otherwob
  3048.  
  3049.  move.l d0,PLR1_yoff
  3050.  move.l d0,newy
  3051.  move.l d0,oldy
  3052.  
  3053.  move.l d4,thingheight
  3054.  move.l #40*256,StepUpVal
  3055.  tst.b PLR1_Ducked
  3056.  beq.s .okbigstep
  3057.  move.l #10*256,StepUpVal
  3058. .okbigstep:
  3059.  
  3060.  move.l #$1000000,StepDownVal
  3061.  
  3062.  move.l PLR1_Roompt,a0
  3063.  move.w ToTelZone(a0),d0
  3064.  blt .noteleport
  3065.  
  3066.  move.w ToTelX(a0),newx
  3067.  move.w ToTelZ(a0),newz
  3068.  move.w #-1,CollId
  3069.  move.l #%111111111111111111,CollideFlags
  3070.  bsr Collision
  3071.  tst.b hitwall
  3072.  beq.s .teleport
  3073.  
  3074.  move.w PLR1_xoff,newx
  3075.  move.w PLR1_zoff,newz
  3076.  bra .noteleport
  3077.  
  3078. .teleport:
  3079.  
  3080.  move.l PLR1_Roompt,a0
  3081.  move.w ToTelZone(a0),d0
  3082.  move.w ToTelX(a0),PLR1_xoff
  3083.  move.w ToTelZ(a0),PLR1_zoff
  3084.  move.l PLR1_yoff,d1
  3085.  sub.l ToZoneFloor(a0),d1
  3086.  move.l ZoneAdds,a0
  3087.  move.l (a0,d0.w*4),a0
  3088.  add.l LEVELDATA,a0
  3089.  move.l a0,PLR1_Roompt
  3090.  add.l ToZoneFloor(a0),d1
  3091.  move.l d1,PLR1s_yoff
  3092.  move.l d1,PLR1_yoff
  3093.  move.l d1,PLR1s_tyoff
  3094.  move.l PLR1_xoff,PLR1s_xoff
  3095.  move.l PLR1_zoff,PLR1s_zoff
  3096.  
  3097.  SAVEREGS
  3098.  move.w #0,Noisex
  3099.  move.w #0,Noisez
  3100.  move.w #26,Samplenum
  3101.  move.w #100,Noisevol
  3102.  move.b #$fa,IDNUM
  3103.  jsr MakeSomeNoise
  3104.  GETREGS
  3105.  
  3106.  bra .cantmove
  3107.  
  3108. .noteleport:
  3109.  
  3110.  move.l PLR1_Roompt,objroom
  3111.  move.w #%100000000,wallflags
  3112.  move.b PLR1_StoodInTop,StoodInTop
  3113.  
  3114.  move.l #%1011111110111000001,CollideFlags
  3115.  move.w #-1,CollId
  3116.  
  3117.  bsr Collision
  3118.  tst.b hitwall
  3119.  beq.s .nothitanything
  3120.  move.w oldx,PLR1_xoff
  3121.  move.w oldz,PLR1_zoff
  3122.  move.l PLR1_xoff,PLR1s_xoff
  3123.  move.l PLR1_zoff,PLR1s_zoff
  3124.  bra .cantmove
  3125. .nothitanything:
  3126.  
  3127.  move.w #40,extlen
  3128.  move.b #0,awayfromwall
  3129.  
  3130.  clr.b exitfirst
  3131.  clr.b wallbounce
  3132.  bsr MoveObject
  3133.  move.b StoodInTop,PLR1_StoodInTop
  3134.  move.l objroom,PLR1_Roompt
  3135.  move.w newx,PLR1_xoff
  3136.  move.w newz,PLR1_zoff
  3137.  move.l PLR1_xoff,PLR1s_xoff
  3138.  move.l PLR1_zoff,PLR1s_zoff
  3139.  
  3140. .cantmove:
  3141.  
  3142.  move.l PLR1_Roompt,a0
  3143.  
  3144.  move.l ToZoneFloor(a0),d0
  3145.  tst.b PLR1_StoodInTop
  3146.  beq.s notintop
  3147.  move.l ToUpperFloor(a0),d0
  3148. notintop:
  3149.  
  3150.  adda.w #ToZonePts,a0
  3151.  sub.l PLR1_height,d0
  3152.  move.l d0,PLR1s_tyoff
  3153.  move.w p1_angpos,tmpangpos
  3154.  
  3155. ; move.l (a0),a0        ; jump to viewpoint list
  3156.  * A0 is pointing at a pointer to list of points to rotate
  3157.  move.w (a0)+,d1
  3158.  ext.l d1
  3159.  add.l PLR1_Roompt,d1
  3160.  move.l d1,PLR1_PointsToRotatePtr
  3161.  tst.w (a0)+
  3162.  beq.s nobackgraphics
  3163.  cmp.b #'s',mors
  3164.  beq.s nobackgraphics
  3165.  move.l a0,-(a7)
  3166.  jsr putinbackdrop 
  3167.  move.l (a7)+,a0
  3168. nobackgraphics:
  3169.  adda.w #10,a0
  3170.  move.l a0,PLR1_ListOfGraphRooms
  3171.  
  3172. *************************************************
  3173.  rts
  3174.  
  3175. DRAWNGRAPHTOP
  3176.  
  3177. tstzone: dc.l 0
  3178. CollId: dc.w 0
  3179.  
  3180. PLR2_Control:
  3181.  
  3182. ; Take a snapshot of everything.
  3183.  
  3184.  move.l PLR2_xoff,d2
  3185.  move.l d2,PLR2_oldxoff
  3186.  move.l d2,oldx
  3187.  move.l PLR2_zoff,d3
  3188.  move.l d3,PLR2_oldzoff
  3189.  move.l d3,oldz
  3190.  move.l p2_xoff,d0
  3191.  move.l d0,PLR2_xoff
  3192.  move.l d0,newx
  3193.  move.l p2_zoff,d1
  3194.  move.l d1,newz
  3195.  move.l d1,PLR2_zoff
  3196.  
  3197.  move.l p2_height,PLR2_height
  3198.  
  3199.  sub.l d2,d0
  3200.  sub.l d3,d1
  3201.  move.l d0,xdiff
  3202.  move.l d1,zdiff
  3203.  move.w p2_angpos,d0
  3204.  move.w d0,PLR2_angpos
  3205.  
  3206.  move.l #SineTable,a1
  3207.  move.w (a1,d0.w),PLR2_sinval
  3208.  add.w #2048,d0
  3209.  and.w #8190,d0
  3210.  move.w (a1,d0.w),PLR2_cosval
  3211.  
  3212.  move.l p2_yoff,d0
  3213.  move.w p2_bobble,d1
  3214.  move.w (a1,d1.w),d1
  3215.  move.w d1,d3
  3216.  ble.s .notnegative
  3217.  neg.w d1
  3218. .notnegative:
  3219.  add.w #16384,d1
  3220.  asr.w #4,d1
  3221.  
  3222.  tst.b PLR2_Ducked
  3223.  bne.s .notdouble
  3224.  add.w d1,d1
  3225. .notdouble
  3226.  ext.l d1
  3227.  move.l PLR2_height,d4
  3228.  sub.l d1,d4
  3229.  add.l d1,d0
  3230.  
  3231.  cmp.b #'s',mors
  3232.  bne.s .otherwob
  3233.  asr.w #6,d3
  3234.  ext.l d3
  3235.  move.l d3,xwobble
  3236.  move.w PLR2_sinval,d1
  3237.  muls d3,d1
  3238.  move.w PLR2_cosval,d2
  3239.  muls d3,d2
  3240.  swap d1
  3241.  swap d2
  3242.  asr.w #7,d1
  3243.  move.w d1,xwobxoff
  3244.  asr.w #7,d2
  3245.  neg.w d2
  3246.  move.w d2,xwobzoff
  3247. .otherwob
  3248.  
  3249.  move.l d0,PLR2_yoff
  3250.  move.l d0,newy
  3251.  move.l d0,oldy
  3252.  
  3253.  move.l d4,thingheight
  3254.  move.l #40*256,StepUpVal
  3255.  tst.b PLR2_Ducked
  3256.  beq.s .okbigstep
  3257.  move.l #10*256,StepUpVal
  3258. .okbigstep:
  3259.  
  3260.  move.l #$1000000,StepDownVal
  3261.  
  3262.  move.l PLR2_Roompt,a0
  3263.  move.w ToTelZone(a0),d0
  3264.  blt .noteleport
  3265.  
  3266.  move.w ToTelX(a0),newx
  3267.  move.w ToTelZ(a0),newz
  3268.  move.w #-1,CollId
  3269.  move.l #%111111111111111111,CollideFlags
  3270.  bsr Collision
  3271.  tst.b hitwall
  3272.  beq.s .teleport
  3273.  
  3274.  move.w PLR2_xoff,newx
  3275.  move.w PLR2_zoff,newz
  3276.  bra .noteleport
  3277.  
  3278. .teleport:
  3279.  
  3280.  move.l PLR2_Roompt,a0
  3281.  move.w ToTelZone(a0),d0
  3282.  move.w ToTelX(a0),PLR2_xoff
  3283.  move.w ToTelZ(a0),PLR2_zoff
  3284.  move.l PLR2_yoff,d1
  3285.  sub.l ToZoneFloor(a0),d1
  3286.  move.l ZoneAdds,a0
  3287.  move.l (a0,d0.w*4),a0
  3288.  add.l LEVELDATA,a0
  3289.  move.l a0,PLR2_Roompt
  3290.  add.l ToZoneFloor(a0),d1
  3291.  move.l d1,PLR2s_yoff
  3292.  move.l d1,PLR2_yoff
  3293.  move.l d1,PLR2s_tyoff
  3294.  move.l PLR2_xoff,PLR2s_xoff
  3295.  move.l PLR2_zoff,PLR2s_zoff
  3296.  
  3297.  SAVEREGS
  3298.  move.w #0,Noisex
  3299.  move.w #0,Noisez
  3300.  move.w #26,Samplenum
  3301.  move.w #100,Noisevol
  3302.  move.b #$fa,IDNUM
  3303.  jsr MakeSomeNoise
  3304.  GETREGS
  3305.  
  3306.  bra .cantmove
  3307.  
  3308. .noteleport:
  3309.  
  3310.  move.l PLR2_Roompt,objroom
  3311.  move.w #%100000000000,wallflags
  3312.  move.b PLR2_StoodInTop,StoodInTop
  3313.  
  3314.  move.l #%1011111010111100001,CollideFlags
  3315.  move.w #-1,CollId
  3316.  
  3317.  bsr Collision
  3318.  tst.b hitwall
  3319.  beq.s .nothitanything
  3320.  move.w oldx,PLR2_xoff
  3321.  move.w oldz,PLR2_zoff
  3322.  move.l PLR2_xoff,PLR2s_xoff
  3323.  move.l PLR2_zoff,PLR2s_zoff
  3324.  bra .cantmove
  3325. .nothitanything:
  3326.  
  3327.  move.w #40,extlen
  3328.  move.b #0,awayfromwall
  3329.  
  3330.  clr.b exitfirst
  3331.  clr.b wallbounce
  3332.  bsr MoveObject
  3333.  move.b StoodInTop,PLR2_StoodInTop
  3334.  move.l objroom,PLR2_Roompt
  3335.  move.w newx,PLR2_xoff
  3336.  move.w newz,PLR2_zoff
  3337.  move.l PLR2_xoff,PLR2s_xoff
  3338.  move.l PLR2_zoff,PLR2s_zoff
  3339.  
  3340. .cantmove
  3341.  
  3342.  move.l PLR2_Roompt,a0
  3343.  
  3344.  move.l ToZoneFloor(a0),d0
  3345.  tst.b PLR2_StoodInTop
  3346.  beq.s .notintop
  3347.  move.l ToUpperFloor(a0),d0
  3348. .notintop:
  3349.  
  3350.  adda.w #ToZonePts,a0
  3351.  sub.l PLR2_height,d0
  3352.  move.l d0,PLR2s_tyoff
  3353.  move.w p2_angpos,tmpangpos
  3354.  
  3355. ; move.l (a0),a0        ; jump to viewpoint list
  3356.  * A0 is pointing at a pointer to list of points to rotate
  3357.  move.w (a0)+,d1
  3358.  ext.l d1
  3359.  add.l PLR2_Roompt,d1
  3360.  move.l d1,PLR2_PointsToRotatePtr
  3361.  tst.w (a0)+
  3362.  beq.s .nobackgraphics
  3363.  cmp.b #'s',mors
  3364.  bne.s .nobackgraphics
  3365.  move.l a0,-(a7)
  3366.  jsr putinbackdrop 
  3367.  move.l (a7)+,a0
  3368. .nobackgraphics:
  3369.  adda.w #10,a0
  3370.  move.l a0,PLR2_ListOfGraphRooms
  3371.  
  3372. *****************************************************
  3373.  
  3374.  rts
  3375.  
  3376.  
  3377. KeyMap: ds.b 256
  3378.  
  3379. fillscrnwater:
  3380.  dc.w 0
  3381. DONTDOGUN:
  3382.  dc.w 0
  3383.  
  3384.  
  3385. DrawDisplay:
  3386.  
  3387.  
  3388.  clr.b fillscrnwater
  3389.  
  3390.  move.l #SineTable,a0
  3391.  move.w angpos,d0
  3392.  move.w (a0,d0.w),d6
  3393.  adda.w #2048,a0
  3394.  move.w (a0,d0.w),d7
  3395.  move.w d6,sinval
  3396.  move.w d7,cosval
  3397.  
  3398.  move.l #KeyMap,a5
  3399.  moveq #0,d5
  3400.  move.b look_behind_key,d5
  3401.  tst.b (a5,d5.w)
  3402.  sne DONTDOGUN
  3403.  beq.s .nolookback
  3404.  neg.w cosval
  3405.  neg.w sinval
  3406. .nolookback:
  3407.  
  3408.  
  3409.  move.l yoff,d0
  3410.  asr.l #8,d0
  3411.  move.w d0,d1
  3412.  add.w #256-32,d1
  3413.  and.w #255,d1
  3414.  move.w d1,wallyoff
  3415.  asl.w #2,d0
  3416.  move.w d0,flooryoff
  3417.  
  3418.  move.w xoff,d6
  3419.  move.w d6,d3
  3420.  asr.w #1,d3
  3421.  add.w d3,d6
  3422.  asr.w #1,d6
  3423.  move.w d6,xoff34
  3424.  
  3425.  move.w zoff,d6
  3426.  move.w d6,d3
  3427.  asr.w #1,d3
  3428.  add.w d3,d6
  3429.  asr.w #1,d6
  3430.  move.w d6,zoff34
  3431.  
  3432.  bsr RotateLevelPts
  3433.  bsr RotateObjectPts
  3434.  bsr CalcPLR1InLine
  3435.  
  3436.  
  3437.  cmp.b #'n',mors
  3438.  bne.s doplr2too
  3439.  move.l PLR2_Obj,a0
  3440.  move.w #-1,12(a0)
  3441.  move.w #-1,GraphicRoom(a0)
  3442.  bra noplr2either
  3443.  
  3444. doplr2too:
  3445.  bsr CalcPLR2InLine
  3446. noplr2either:
  3447.  
  3448.  move.l endoflist,a0
  3449. subroomloop:
  3450.  move.w -(a0),d7
  3451.  blt jumpoutofrooms
  3452.  
  3453. ; bsr setlrclip
  3454. ; move.w leftclip,d0
  3455. ; cmp.w rightclip,d0
  3456. ; bge subroomloop
  3457.  move.l a0,-(a7)
  3458.  
  3459.  move.l ZoneAdds,a0
  3460.  move.l (a0,d7.w*4),a0
  3461.  add.l LEVELDATA,a0
  3462.  move.l ToZoneRoof(a0),SplitHeight
  3463.  move.l a0,ROOMBACK
  3464.  
  3465.  move.l ZoneGraphAdds,a0
  3466.  move.l 4(a0,d7.w*8),a2
  3467.  move.l (a0,d7.w*8),a0
  3468.  
  3469.  add.l LEVELGRAPHICS,a0
  3470.  add.l LEVELGRAPHICS,a2
  3471.  move.l a2,ThisRoomToDraw+4
  3472.  move.l a0,ThisRoomToDraw
  3473.  
  3474.  move.l ListOfGraphRooms,a1
  3475.  
  3476.  
  3477.  
  3478. finditit:
  3479.  tst.w (a1)
  3480.  blt nomoretodoatall
  3481.  cmp.w (a1),d7
  3482.  beq outoffind
  3483.  adda.w #8,a1
  3484.  bra finditit
  3485.  
  3486. outoffind:
  3487.  
  3488.  move.l a1,-(a7)
  3489.  
  3490.  
  3491.  move.w #0,leftclip
  3492.  move.w #96,rightclip
  3493.  moveq #0,d7
  3494.  move.w 2(a1),d7
  3495.  blt.s outofrcliplop
  3496.  move.l LEVELCLIPS,a0
  3497.  lea (a0,d7.l*2),a0
  3498.  
  3499.  tst.w (a0)
  3500.  blt outoflcliplop
  3501.  
  3502.  bsr NEWsetlclip
  3503.  
  3504. intolcliplop:        ; clips
  3505.  tst.w (a0)
  3506.  blt outoflcliplop
  3507.  
  3508.  bsr NEWsetlclip 
  3509.  bra intolcliplop
  3510.  
  3511. outoflcliplop:
  3512.  
  3513.  addq #2,a0
  3514.  
  3515.  tst.w (a0)
  3516.  blt outofrcliplop
  3517.  
  3518.  bsr NEWsetrclip
  3519.  
  3520. intorcliplop:        ; clips
  3521.  tst.w (a0)
  3522.  blt outofrcliplop
  3523.  
  3524.  bsr NEWsetrclip 
  3525.  bra intorcliplop
  3526.  
  3527. outofrcliplop:
  3528.  
  3529.  
  3530.  move.w leftclip,d0
  3531.  cmp.w #96,d0
  3532.  bge dontbothercantseeit
  3533.  move.w rightclip,d1
  3534.  blt dontbothercantseeit
  3535.  cmp.w d1,d0
  3536.  bge dontbothercantseeit
  3537.  
  3538.  move.l yoff,d0
  3539.  cmp.l SplitHeight,d0
  3540.  blt botfirst
  3541.  
  3542.  move.l ThisRoomToDraw+4,a0
  3543.  cmp.l LEVELGRAPHICS,a0
  3544.  beq.s noupperroom
  3545.  st DOUPPER
  3546.  
  3547.  move.l ROOMBACK,a1
  3548.  move.l ToUpperRoof(a1),TOPOFROOM
  3549.  move.l ToUpperFloor(a1),BOTOFROOM
  3550.  
  3551.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3552.  bsr dothisroom
  3553. noupperroom:
  3554.  move.l ThisRoomToDraw,a0
  3555.  clr.b DOUPPER
  3556.  move.l #CurrentPointBrights,PointBrightsPtr
  3557.  
  3558.  move.l ROOMBACK,a1
  3559.  move.l ToZoneRoof(a1),d0
  3560.  move.l d0,TOPOFROOM
  3561.  move.l ToZoneFloor(a1),d1
  3562.  move.l d1,BOTOFROOM
  3563.  
  3564.  move.l ToZoneWater(a1),d2
  3565.  cmp.l yoff,d2
  3566.  blt.s .abovefirst
  3567.  move.l d2,BEFOREWATTOP
  3568.  move.l d1,BEFOREWATBOT
  3569.  move.l d2,AFTERWATBOT
  3570.  move.l d0,AFTERWATTOP
  3571.  bra.s .belowfirst
  3572. .abovefirst:
  3573.  move.l d0,BEFOREWATTOP
  3574.  move.l d2,BEFOREWATBOT
  3575.  move.l d1,AFTERWATBOT
  3576.  move.l d2,AFTERWATTOP
  3577. .belowfirst:
  3578.  
  3579.  bsr dothisroom
  3580.  
  3581.  bra dontbothercantseeit
  3582. botfirst:
  3583.  
  3584.  move.l ThisRoomToDraw,a0
  3585.  clr.b DOUPPER
  3586.  move.l #CurrentPointBrights,PointBrightsPtr
  3587.  
  3588.  move.l ROOMBACK,a1
  3589.  move.l ToZoneRoof(a1),d0
  3590.  move.l d0,TOPOFROOM
  3591.  move.l ToZoneFloor(a1),d1
  3592.  move.l d1,BOTOFROOM
  3593.  
  3594.  move.l ToZoneWater(a1),d2
  3595.  cmp.l yoff,d2
  3596.  blt.s .abovefirst
  3597.  move.l d2,BEFOREWATTOP
  3598.  move.l d1,BEFOREWATBOT
  3599.  move.l d2,AFTERWATBOT
  3600.  move.l d0,AFTERWATTOP
  3601.  bra.s .belowfirst
  3602. .abovefirst:
  3603.  move.l d0,BEFOREWATTOP
  3604.  move.l d2,BEFOREWATBOT
  3605.  move.l d1,AFTERWATBOT
  3606.  move.l d2,AFTERWATTOP
  3607. .belowfirst:
  3608.  
  3609.  
  3610.  bsr dothisroom
  3611.  move.l ThisRoomToDraw+4,a0
  3612.  cmp.l LEVELGRAPHICS,a0
  3613.  beq.s noupperroom2
  3614.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3615.  
  3616.  move.l ROOMBACK,a1
  3617.  move.l ToUpperRoof(a1),TOPOFROOM
  3618.  move.l ToUpperFloor(a1),BOTOFROOM
  3619.  
  3620.  st DOUPPER
  3621.  bsr dothisroom
  3622. noupperroom2:
  3623.  
  3624. dontbothercantseeit:
  3625. pastemp:
  3626.  
  3627.  move.l (a7)+,a1
  3628.  move.l ThisRoomToDraw,a0
  3629.  move.w (a0),d7
  3630.  
  3631.  adda.w #8,a1
  3632.  bra finditit
  3633.  
  3634. nomoretodoatall:
  3635.  
  3636.  move.l (a7)+,a0
  3637.  
  3638.  bra subroomloop
  3639.  
  3640. jumpoutofrooms:
  3641.  
  3642.  tst.b DONTDOGUN
  3643.  bne NOGUNLOOK
  3644.  
  3645.  cmp.b #'s',mors
  3646.  beq.s drawslavegun
  3647.  
  3648.  moveq #0,d0
  3649.  move.b PLR1_GunSelected,d0
  3650.  moveq #0,d1
  3651.  move.b PLR1_GunFrame,d1
  3652.  bsr DRAWINGUN
  3653.  bra drawngun
  3654.  
  3655. drawslavegun
  3656.  moveq #0,d0
  3657.  move.b PLR2_GunSelected,d0
  3658.  moveq #0,d1
  3659.  move.b PLR2_GunFrame,d1
  3660.  bsr DRAWINGUN
  3661.  
  3662. drawngun:
  3663.  
  3664. NOGUNLOOK:
  3665.  
  3666.  moveq #0,d1
  3667.  move.b PLR1_GunFrame,d1
  3668.  sub.w TempFrames,d1
  3669.  bgt.s .nn
  3670.  moveq #0,d1
  3671. .nn
  3672.  move.b d1,PLR1_GunFrame
  3673.  
  3674.  ble.s .donefire
  3675.  sub.b #1,PLR1_GunFrame
  3676. .donefire:
  3677.  
  3678.  moveq #0,d1
  3679.  move.b PLR2_GunFrame,d1
  3680.  sub.w TempFrames,d1
  3681.  bgt.s .nn2
  3682.  moveq #0,d1
  3683. .nn2
  3684.  move.b d2,PLR2_GunFrame
  3685.  
  3686.  ble.s .donefire2
  3687.  sub.b #1,PLR2_GunFrame
  3688. .donefire2:
  3689.  
  3690.  
  3691.  move.w #3,d5
  3692.  tst.b fillscrnwater
  3693.  beq nowaterfull
  3694.  bgt oknothalf
  3695.  moveq #1,d5
  3696. oknothalf:
  3697.  
  3698.  bclr.b #1,$bfe001
  3699.  
  3700.  move.l #brightentab,a2
  3701.  moveq #0,d2
  3702.  move.l frompt,a0
  3703.  add.l #104*4*60,a0
  3704.  
  3705.  move.w #31,d0
  3706. fw:
  3707.  move.w d5,d1
  3708.  move.l a0,a1
  3709. fwd:
  3710. val SET 104*4*19
  3711.  REPT 20
  3712.  and.w #$ff,val(a1)
  3713. val SET val-104*4
  3714.  ENDR
  3715.  sub.l #104*4*20,a1
  3716.  dbra d1,fwd
  3717.  addq #4,a0
  3718.  dbra d0,fw
  3719.  
  3720.  addq #4,a0
  3721.  
  3722.  move.w #31,d0
  3723. sw:
  3724.  move.w d5,d1
  3725.  move.l a0,a1
  3726. swd:
  3727. val SET 104*4*19
  3728.  REPT 20
  3729.  and.w #$ff,val(a1)
  3730. val SET val-104*4
  3731.  ENDR
  3732.  sub.l #104*4*20,a1
  3733.  dbra d1,swd
  3734.  addq #4,a0
  3735.  dbra d0,sw
  3736.  
  3737.  addq #4,a0
  3738.  
  3739.  move.w #31,d0
  3740. tw:
  3741.  move.w d5,d1
  3742.  move.l a0,a1
  3743. twd:
  3744. val SET 104*4*19
  3745.  REPT 20
  3746.  and.w #$ff,val(a1)
  3747. val SET val-104*4
  3748.  ENDR
  3749.  sub.l #104*4*20,a1
  3750.  dbra d1,twd
  3751.  addq #4,a0
  3752.  dbra d0,tw
  3753.  
  3754.  rts
  3755.  
  3756. nowaterfull:
  3757.  bset.b #1,$bfe001
  3758.  rts
  3759.  
  3760. prot9: dc.w 0
  3761.  
  3762. TempBuffer: ds.l 100 
  3763.  
  3764. ClipTable: ds.l 30
  3765. EndOfClipPt: dc.l 0
  3766. DOUPPER: dc.w 0
  3767.  
  3768. RealTable:
  3769.  dc.l prot1-78935450
  3770.  dc.l prot2-78935450
  3771.  dc.l prot3-78935450
  3772.  dc.l prot4-78935450
  3773.  dc.l prot5-78935450
  3774.  dc.l prot6-78935450
  3775.  dc.l prot7-78935450
  3776.  dc.l prot8-78935450
  3777.  dc.l prot9-78935450
  3778.  dc.l protA-78935450
  3779.  
  3780. dothisroom
  3781.  
  3782.  move.w (a0)+,d0
  3783.  move.w d0,currzone
  3784.  move.l #ZoneBrightTable,a1
  3785.  move.l (a1,d0.w*4),d1
  3786.  tst.b DOUPPER
  3787.  bne.s .okbot
  3788.  swap d1
  3789. .okbot:
  3790.  move.w d1,ZoneBright
  3791.  
  3792. polyloop:
  3793.  move.w (a0)+,d0
  3794.  blt jumpoutofloop
  3795.  beq itsawall
  3796.  cmp.w #3,d0
  3797.  beq itsasetclip
  3798.  blt itsafloor
  3799.  cmp.w #4,d0
  3800.  beq itsanobject
  3801.  cmp.w #5,d0
  3802.  beq.s itsanarc
  3803.  cmp.w #6,d0
  3804.  beq itsalightbeam
  3805.  cmp.w #7,d0
  3806.  beq.s itswater
  3807.  cmp.w #9,d0
  3808.  ble itsachunkyfloor
  3809.  cmp.w #11,d0
  3810.  ble.s itsabumpyfloor
  3811.  cmp.w #12,d0
  3812.  beq.s itsbackdrop
  3813.  cmp.w #13,d0
  3814.  beq.s itsaseewall
  3815.  
  3816.  bra polyloop
  3817.  
  3818. itsaseewall:
  3819.  st seethru
  3820.  jsr itsawalldraw
  3821.  bra polyloop
  3822.  
  3823. itsbackdrop:
  3824.  jsr putinbackdrop
  3825.  bra polyloop
  3826.  
  3827. itswater:
  3828.  move.w #3,d0
  3829.  clr.b gourfloor
  3830.  move.l #FloorLine,LineToUse
  3831.  st usewater
  3832.  clr.b usebumps
  3833.  jsr itsafloordraw
  3834.  bra polyloop
  3835.  
  3836. itsanarc:
  3837.  jsr CurveDraw
  3838.  bra polyloop
  3839.  
  3840. itsanobject:
  3841.  jsr ObjDraw
  3842.  bra polyloop
  3843.  
  3844. itsalightbeam:
  3845.  jsr LightDraw
  3846.  bra polyloop
  3847.  
  3848. itsabumpyfloor:
  3849.  sub.w #9,d0
  3850.  st usebumps
  3851.  st smoothbumps
  3852.  clr.b usewater
  3853.  move.l #BumpLine,LineToUse
  3854.  jsr itsafloordraw
  3855.  bra polyloop
  3856.  
  3857. itsachunkyfloor:
  3858.  subq.w #7,d0
  3859.  st usebumps
  3860.  sub.w #12,topclip
  3861. ; add.w #10,botclip
  3862.  clr.b smoothbumps
  3863.  clr.b usewater
  3864.  move.l #BumpLine,LineToUse
  3865.  jsr itsafloordraw
  3866.  add.w #12,topclip
  3867. ; sub.w #10,botclip
  3868.  bra polyloop 
  3869.  
  3870. itsafloor:
  3871.  
  3872.  move.l a0,-(a7)
  3873.  move.l $4.w,a6
  3874.  jsr _LVOSuperState
  3875.  move.l d0,SSTACK
  3876.  move.l (a7)+,a0
  3877.  
  3878.  move.l THEFLOORLINE,LineToUse
  3879. * 1,2 = floor/roof
  3880.  clr.b usewater
  3881.  clr.b usebumps
  3882.  move.b GOURSEL,gourfloor    
  3883.  jsr itsafloordraw
  3884.  move.l a0,-(a7)
  3885.  move.l $4.w,a6
  3886.  move.l SSTACK,d0
  3887.  jsr _LVOUserState
  3888.  move.l (a7)+,a0
  3889.  
  3890.  bra polyloop
  3891. itsasetclip:
  3892.  bra polyloop
  3893. itsawall:
  3894.  clr.b seethru
  3895. ; move.l #stripbuffer,a1
  3896.  jsr itsawalldraw
  3897.  bra polyloop
  3898.  
  3899. jumpoutofloop:
  3900.  rts
  3901.  
  3902. GOURSEL: dc.w 0
  3903. ThisRoomToDraw: dc.l 0,0
  3904. SplitHeight: dc.l 0
  3905.  
  3906.  include "ab3:source/OrderZones"
  3907.  
  3908. ReadMouse:
  3909.  move.l #$dff000,a6
  3910.  clr.l d0
  3911.  clr.l d1
  3912.  move.w $a(a6),d0
  3913.  lsr.w #8,d0
  3914.  ext.l d0
  3915.  move.w d0,d3
  3916.  move.w oldmy,d2
  3917.  sub.w d2,d0
  3918.  
  3919.  cmp.w #127,d0
  3920.  blt nonegy
  3921.  move.w #255,d1
  3922.  sub.w d0,d1
  3923.  move.w d1,d0
  3924.  neg.w d0
  3925. nonegy:
  3926.  
  3927.  cmp.w #-127,d0
  3928.  bge nonegy2
  3929.  move.w #255,d1
  3930.  add.w d0,d1
  3931.  move.w d1,d0
  3932. nonegy2:
  3933.  
  3934.  add.b d0,d2
  3935.  add.w d0,oldy2
  3936.  move.w d2,oldmy
  3937.  move.w d2,d0
  3938.  
  3939.  move.w oldy2,d0
  3940.  move.w d0,ymouse
  3941.  
  3942.  clr.l d0
  3943.  clr.l d1
  3944.  move.w $a(a6),d0
  3945.  ext.w d0
  3946.  ext.l d0
  3947.  move.w d0,d3
  3948.  move.w oldmx,d2
  3949.  sub.w d2,d0
  3950.  
  3951.  cmp.w #127,d0
  3952.  blt nonegx
  3953.  move.w #255,d1
  3954.  sub.w d0,d1
  3955.  move.w d1,d0
  3956.  neg.w d0
  3957. nonegx:
  3958.  
  3959.  cmp.w #-127,d0
  3960.  bge nonegx2
  3961.  move.w #255,d1
  3962.  add.w d0,d1
  3963.  move.w d1,d0
  3964. nonegx2:
  3965.  
  3966.  add.b d0,d2
  3967.  move.w d0,d1
  3968.  move.w d2,oldmx
  3969.  
  3970.  move.w #$0,$dff034
  3971.  btst #2,$dff016
  3972.  beq.s noturn
  3973.  
  3974.  add.w d0,oldx2
  3975.  move.w oldx2,d0
  3976.  and.w #2047,d0
  3977.  move.w d0,oldx2
  3978.  
  3979.  asl.w #2,d0
  3980.  sub.w prevx,d0
  3981.  add.w d0,prevx
  3982.  add.w d0,angpos
  3983.  move.w #0,lrs
  3984.  rts
  3985.  
  3986. noturn:
  3987.  
  3988. ; got to move lr instead. 
  3989.  
  3990. ; d1 = speed moved l/r
  3991.  
  3992.  move.w d1,lrs
  3993.  
  3994.  rts
  3995.  
  3996. lrs: dc.w 0
  3997. prevx: dc.w 0
  3998.  
  3999. angpos: dc.w 0
  4000. mang: dc.w 0
  4001. oldymouse: dc.w 0
  4002. xmouse: dc.w 0
  4003. ymouse: dc.w 0
  4004. oldx2: dc.w 0
  4005. oldmx: dc.w 0
  4006. oldmy: dc.w 0
  4007. oldy2: dc.w 0
  4008.  
  4009. RotateLevelPts:
  4010.  
  4011.  move.w sinval,d6
  4012.  swap d6
  4013.  move.w cosval,d6
  4014.  
  4015.  move.l PointsToRotatePtr,a0
  4016.  move.l Points,a3
  4017.  move.l #Rotated,a1
  4018.  move.l #OnScreen,a2
  4019.  move.w xoff,d4
  4020.  move.w zoff,d5
  4021.  
  4022. ; move.w #$c40,$dff106
  4023. ; move.w #$f00,$dff180
  4024.  
  4025. pointrotlop:
  4026.  move.w (a0)+,d7
  4027.  blt.s outofpointrot
  4028.  
  4029.  move.w (a3,d7*4),d0
  4030.  sub.w d4,d0
  4031.  move.w d0,d2
  4032.  move.w 2(a3,d7*4),d1
  4033.  sub.w d5,d1
  4034.  muls d6,d2
  4035.  swap d6
  4036.  move.w d1,d3
  4037.  muls d6,d3
  4038.  sub.l d3,d2
  4039.  add.l d2,d2
  4040.  swap d2
  4041.  ext.l d2
  4042.  asl.l #7,d2
  4043.  add.l xwobble,d2
  4044.  move.l d2,(a1,d7*8)
  4045.  
  4046.  muls d6,d0
  4047.  swap d6
  4048.  muls d6,d1
  4049.  add.l d0,d1
  4050.  asl.l #2,d1
  4051.  swap d1
  4052.  move.l d1,4(a1,d7*8)
  4053.  
  4054.  tst.w d1
  4055.  bgt.s ptnotbehind
  4056.  tst.w d2
  4057.  bgt.s onrightsomewhere
  4058.  move.w #0,d2
  4059.  bra putin
  4060. onrightsomewhere:
  4061.  move.w #96,d2
  4062.  bra putin
  4063. ptnotbehind:
  4064.  
  4065.  divs d1,d2
  4066.  add.w #47,d2
  4067. putin:
  4068.  move.w d2,(a2,d7*2)
  4069.  
  4070.  bra pointrotlop
  4071. outofpointrot:
  4072.  
  4073. ; move.w #$c40,$dff106
  4074. ; move.w #$ff0,$dff180
  4075.  
  4076.  rts
  4077.  
  4078. PLR1_ObjDists
  4079.  ds.w 250
  4080. PLR2_ObjDists
  4081.  ds.w 250
  4082.  
  4083. CalcPLR1InLine:
  4084.  
  4085.  move.w PLR1_sinval,d5
  4086.  move.w PLR1_cosval,d6
  4087.  move.l ObjectData,a4
  4088.  move.l ObjectPoints,a0
  4089.  move.w NumObjectPoints,d7
  4090.  move.l #PLR1_ObsInLine,a2
  4091.  move.l #PLR1_ObjDists,a3
  4092.  
  4093. .objpointrotlop:
  4094.  
  4095.  move.w (a0),d0
  4096.  sub.w PLR1_xoff,d0
  4097.  move.w 4(a0),d1
  4098.  addq #8,a0
  4099.  
  4100.  tst.w 12(a4)
  4101.  blt .noworkout
  4102.  
  4103.  moveq #0,d2
  4104.  move.b 16(a4),d2
  4105.  move.l #ColBoxTable,a6
  4106.  lea (a6,d2.w*8),a6
  4107.  
  4108.  sub.w PLR1_zoff,d1
  4109.  move.w d0,d2
  4110.  muls d6,d2
  4111.  move.w d1,d3
  4112.  muls d5,d3
  4113.  sub.l d3,d2
  4114.  add.l d2,d2
  4115.  
  4116.  bgt.s .okh
  4117.  neg.l d2
  4118. .okh:
  4119.  swap d2
  4120.  
  4121.  muls d5,d0
  4122.  muls d6,d1
  4123.  add.l d0,d1
  4124.  asl.l #2,d1
  4125.  swap d1
  4126.  moveq #0,d3
  4127.  
  4128.  tst.w d1
  4129.  ble.s .notinline
  4130.  asr.w #1,d2
  4131.  cmp.w (a6),d2
  4132.  bgt.s .notinline
  4133.  
  4134.  st d3
  4135. .notinline
  4136.  move.b d3,(a2)+
  4137.  
  4138.  move.w d1,(a3)+
  4139.  
  4140.  add.w #64,a4
  4141.  dbra d7,.objpointrotlop
  4142.  
  4143.  rts
  4144.  
  4145. .noworkout:
  4146.  move.b #0,(a2)+
  4147.  move.w #0,(a3)+
  4148.  add.w #64,a4
  4149.  dbra d7,.objpointrotlop
  4150.  rts
  4151.  
  4152.  
  4153. CalcPLR2InLine:
  4154.  
  4155.  move.w PLR2_sinval,d5
  4156.  move.w PLR2_cosval,d6
  4157.  move.l ObjectData,a4
  4158.  move.l ObjectPoints,a0
  4159.  move.w NumObjectPoints,d7
  4160.  move.l #PLR2_ObsInLine,a2
  4161.  move.l #PLR2_ObjDists,a3
  4162.  
  4163. .objpointrotlop:
  4164.  
  4165.  move.w (a0),d0
  4166.  sub.w PLR2_xoff,d0
  4167.  move.w 4(a0),d1
  4168.  addq #8,a0
  4169.  
  4170.  tst.w 12(a4)
  4171.  blt .noworkout
  4172.  
  4173.  moveq #0,d2
  4174.  move.b 16(a4),d2
  4175.  move.l #ColBoxTable,a6
  4176.  lea (a6,d2.w*8),a6
  4177.  
  4178.  sub.w PLR2_zoff,d1
  4179.  move.w d0,d2
  4180.  muls d6,d2
  4181.  move.w d1,d3
  4182.  muls d5,d3
  4183.  sub.l d3,d2
  4184.  add.l d2,d2
  4185.  
  4186.  bgt.s .okh
  4187.  neg.l d2
  4188. .okh:
  4189.  swap d2
  4190.  
  4191.  muls d5,d0
  4192.  muls d6,d1
  4193.  add.l d0,d1
  4194.  asl.l #2,d1
  4195.  swap d1
  4196.  moveq #0,d3
  4197.  
  4198.  tst.w d1
  4199.  ble.s .notinline
  4200.  asr.w #1,d2
  4201.  cmp.w (a6),d2
  4202.  bgt.s .notinline
  4203.  
  4204.  st d3
  4205. .notinline
  4206.  move.b d3,(a2)+
  4207.  
  4208.  move.w d1,(a3)+
  4209.  
  4210.  add.w #64,a4
  4211.  dbra d7,.objpointrotlop
  4212.  
  4213.  rts
  4214.  
  4215. .noworkout:
  4216.  move.w #0,(a3)+
  4217.  move.b #0,(a2)+
  4218.  add.w #64,a4
  4219.  dbra d7,.objpointrotlop
  4220.  rts
  4221.  
  4222.  
  4223. RotateObjectPts:
  4224.  
  4225.  move.w sinval,d5
  4226.  move.w cosval,d6
  4227.  
  4228.  move.l ObjectData,a4
  4229.  move.l ObjectPoints,a0
  4230.  move.w NumObjectPoints,d7
  4231.  move.l #ObjRotated,a1
  4232.  
  4233. .objpointrotlop:
  4234.  
  4235.  move.w (a0),d0
  4236.  sub.w xoff,d0
  4237.  move.w 4(a0),d1
  4238.  addq #8,a0
  4239.  
  4240.  tst.w 12(a4)
  4241.  blt .noworkout
  4242.  
  4243.  sub.w zoff,d1
  4244.  move.w d0,d2
  4245.  muls d6,d2
  4246.  move.w d1,d3
  4247.  muls d5,d3
  4248.  sub.l d3,d2
  4249.  
  4250.  
  4251.  add.l d2,d2
  4252.  swap d2
  4253.  move.w d2,(a1)+
  4254.  
  4255.  muls d5,d0
  4256.  muls d6,d1
  4257.  add.l d0,d1
  4258.  asl.l #2,d1
  4259.  swap d1
  4260.  moveq #0,d3
  4261.  
  4262.  move.w d1,(a1)+
  4263.  ext.l d2
  4264.  asl.l #7,d2
  4265.  add.l xwobble,d2
  4266.  move.l d2,(a1)+
  4267.  sub.l xwobble,d2
  4268.  
  4269.  add.w #64,a4
  4270.  dbra d7,.objpointrotlop
  4271.  
  4272.  rts
  4273.  
  4274. .noworkout:
  4275.   move.l #0,(a1)+
  4276.   move.l #0,(a1)+
  4277.   add.w #64,a4
  4278.   dbra d7,.objpointrotlop
  4279.   rts
  4280.  
  4281. LightDraw:
  4282.  
  4283.  move.w (a0)+,d0
  4284.  move.w (a0)+,d1
  4285.  move.l #Rotated,a1
  4286.  move.w 6(a1,d0.w*8),d2
  4287.  ble.s oneendbehind
  4288.  move.w 6(a1,d1.w*8),d3
  4289.  bgt.s bothendsinfront
  4290.  
  4291. oneendbehind:
  4292.  rts
  4293. bothendsinfront:
  4294.  
  4295.  move.l #OnScreen,a2
  4296.  move.w (a2,d0.w*2),d0
  4297.  bge.s okleftend
  4298.  moveq #0,d0
  4299. okleftend:
  4300.  move.w (a2,d1.w*2),d1
  4301.  bgt.s somevis
  4302.  rts
  4303. somevis:
  4304.  cmp.w #95,d0
  4305.  ble.s somevis2
  4306.  rts
  4307. somevis2:
  4308.  cmp.w #95,d1
  4309.  ble.s okrightend
  4310.  move.w #95,d1
  4311. okrightend:
  4312.  
  4313.  sub.w d0,d1
  4314.  blt.s wrongbloodywayround
  4315.  move.l #brightentab,a4
  4316.  move.l #objintocop,a1
  4317.  lea (a1,d0.w*2),a1
  4318.  
  4319.  move.l frompt,a3
  4320.  move.w #104*4,d6
  4321.  move.w #79,d2
  4322. lacross:
  4323.  move.w d2,d3
  4324.  move.l a3,a2
  4325.  adda.w (a1)+,a2
  4326. ldown:
  4327.  add.w d6,a2
  4328.  move.w (a2),d7
  4329.  move.w (a4,d7.w*2),(a2)
  4330.  dbra d3,ldown
  4331.  dbra d1,lacross
  4332.  
  4333. wrongbloodywayround:
  4334.  
  4335.  rts
  4336.  
  4337. FaceToPlace: dc.w 0
  4338.  
  4339. Cheese:
  4340.  dc.w 4,15
  4341.  
  4342. FacesList:
  4343.  dc.w 0,4*4
  4344.  dc.w 1,2*4
  4345.  dc.w 0,2*4
  4346.  dc.w 2,2*4
  4347.  dc.w 0,2*4
  4348.  dc.w 1,3*4
  4349.  dc.w 0,2*4
  4350.  dc.w 2,3*4
  4351.  dc.w 0,5*4
  4352.  dc.w 1,2*4
  4353.  dc.w 0,2*4
  4354.  dc.w 2,2*4
  4355.  dc.w 0,2*4
  4356.  dc.w 1,2*4
  4357.  dc.w 0,2*4
  4358.  dc.w 2,3*4
  4359.  dc.w 0,1*4
  4360.  dc.w 1,3*4
  4361.  dc.w 0,1*4
  4362.  dc.w 2,3*4
  4363.  dc.w 0,1*4
  4364.  
  4365. EndOfFacesList:
  4366.  
  4367. FacesPtr:
  4368.  dc.l FacesList
  4369. FacesCounter:
  4370.  dc.w 0
  4371. Expression:
  4372.  dc.w 0
  4373.  
  4374. PlaceFace:
  4375.  
  4376.  move.w FacesCounter,d0
  4377.  subq #1,d0
  4378.  bgt.s NoNewFace
  4379.  
  4380.  move.l FacesPtr,a0
  4381.  
  4382.  move.w 2(a0),d0
  4383.  move.w (a0),Expression
  4384.  addq #4,a0
  4385.  cmp.l #EndOfFacesList,a0
  4386.  blt.s NotFirstFace
  4387.  
  4388.  move.l #FacesList,a0
  4389.  
  4390. NotFirstFace
  4391.  move.l a0,FacesPtr
  4392.  
  4393. NoNewFace:
  4394.  
  4395.  move.w d0,FacesCounter
  4396.  
  4397.  Move.w FaceToPlace,d0
  4398.  muls #5,d0
  4399.  add.w Expression,d0
  4400.  move.l #FacePlace+10,a0
  4401.  move.l #Faces,a1
  4402.  muls #(4*32*5),d0
  4403.  adda.w d0,a1
  4404.  move.w #4,d0
  4405.  move.w #24,d1
  4406.  
  4407.  move.w #4,d3
  4408. bitplaneloop:
  4409.  move.w #31,d2
  4410. PlaceFaceToPlaceInFacePlaceLoop:
  4411.  move.l (a1),(a0)
  4412.  adda.w d0,a1
  4413.  adda.w d1,a0
  4414.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4415.  dbra d3,bitplaneloop
  4416.  
  4417.  rts
  4418.  
  4419. Energy:
  4420.  dc.w 191
  4421. OldEnergy:
  4422.  dc.w 191
  4423. Ammo: dc.w 63
  4424. OldAmmo: dc.w 63
  4425.  
  4426. FullEnergy:
  4427.  move.w #127,Energy
  4428.  move.w #127,OldEnergy
  4429.  move.l #health,a0
  4430.  move.l #borders,a1
  4431.  add.l #25*8*2+6,a1
  4432.  lea 2592(a1),a2
  4433.  move.w #127,d0
  4434. PutInFull:
  4435.  move.b (a0)+,(a1)
  4436.  move.b (a0)+,8(a1)
  4437.  add.w #16,a1
  4438.  move.b (a0)+,(a2)
  4439.  move.b (a0)+,8(a2)
  4440.  add.w #16,a2
  4441.  dbra d0,PutInFull
  4442.  
  4443.  rts
  4444.  
  4445. EnergyBar:
  4446.  
  4447.  move.w Energy,d0
  4448.  cmp.w OldEnergy,d0
  4449.  bne.s gottochange
  4450.  
  4451. NoChange
  4452.  rts
  4453.  
  4454. gottochange:
  4455.   
  4456.  blt LessEnergy
  4457.  cmp.w #127,Energy
  4458.  blt.s NotMax
  4459.  move.w #127,Energy
  4460. NotMax:
  4461.  
  4462.  move.w Energy,d0
  4463.  move.w OldEnergy,d2
  4464.  sub.w d0,d2
  4465.  beq.s NoChange    
  4466.  neg.w d2
  4467.  
  4468.  move.w #127,d3
  4469.  sub.w d0,d3
  4470.  
  4471.  move.l #health,a0
  4472.  lea (a0,d3.w*4),a0
  4473.  move.l #borders+25*16+6,a1
  4474.  lsl.w #4,d3
  4475.  add.w d3,a1
  4476.  lea 2592(a1),a2
  4477.  
  4478. EnergyRise:
  4479.  move.b (a0)+,(a1)
  4480.  move.b (a0)+,8(a1)
  4481.  add.w #16,a1
  4482.  move.b (a0)+,(a2)
  4483.  move.b (a0)+,8(a2)
  4484.  add.w #16,a2
  4485.  subq #1,d2
  4486.  bgt.s EnergyRise
  4487.  
  4488.  move.w Energy,OldEnergy
  4489.  
  4490.  rts 
  4491.  
  4492. LessEnergy: 
  4493.  move.w OldEnergy,d2
  4494.  sub.w d0,d2
  4495.  
  4496.  move.w #127,d3
  4497.  sub.w OldEnergy,d3
  4498.  
  4499.  move.l #borders+25*16+6,a1
  4500.  asl.w #4,d3
  4501.  add.w d3,a1
  4502.  lea 2592(a1),a2
  4503.  
  4504. EnergyDrain:
  4505.  move.b #0,(a1)
  4506.  move.b #0,8(a1)
  4507.  move.b #0,(a2)
  4508.  move.b #0,8(a2)
  4509.  add.w #16,a1
  4510.  add.w #16,a2
  4511.  subq #1,d2
  4512.  bgt.s EnergyDrain
  4513.  
  4514.  move.w Energy,OldEnergy
  4515.  
  4516.  rts 
  4517.  
  4518. AmmoBar:
  4519.  
  4520.  move.w Ammo,d0
  4521.  cmp.w OldAmmo,d0
  4522.  bne.s .gottochange
  4523.  
  4524. .NoChange
  4525.  rts
  4526.  
  4527. .gottochange:
  4528.   
  4529.  blt LessAmmo
  4530.  cmp.w #63,Ammo
  4531.  blt.s .NotMax
  4532.  move.w #63,Ammo
  4533. .NotMax:
  4534.  
  4535.  move.w Ammo,d0
  4536.  move.w OldAmmo,d2
  4537.  sub.w d0,d2
  4538.  beq.s .NoChange
  4539.  neg.w d2
  4540.  
  4541.  move.w #63,d3
  4542.  sub.w d0,d3
  4543.  
  4544.  move.l #Ammunition,a0
  4545.  lea (a0,d3.w*8),a0
  4546.  move.l #borders+5184+25*16+1,a1
  4547.  lsl.w #5,d3
  4548.  add.w d3,a1
  4549.  lea 2592(a1),a2
  4550.  
  4551. AmmoRise:
  4552.  move.b (a0)+,(a1)
  4553.  move.b (a0)+,8(a1)
  4554.  add.w #16,a1
  4555.  move.b (a0)+,(a2)
  4556.  move.b (a0)+,8(a2)
  4557.  add.w #16,a2
  4558.  move.b (a0)+,(a1)
  4559.  move.b (a0)+,8(a1)
  4560.  add.w #16,a1
  4561.  move.b (a0)+,(a2)
  4562.  move.b (a0)+,8(a2)
  4563.  add.w #16,a2
  4564.  subq #1,d2
  4565.  bgt.s AmmoRise
  4566.  
  4567.  move.w Ammo,OldAmmo
  4568.  
  4569.  rts 
  4570.  
  4571.  
  4572. LessAmmo: 
  4573.  move.w OldAmmo,d2
  4574.  sub.w d0,d2
  4575.  
  4576.  move.w #63,d3
  4577.  sub.w OldAmmo,d3
  4578.  
  4579.  move.l #borders++5184+25*16+1,a1
  4580.  asl.w #5,d3
  4581.  add.w d3,a1
  4582.  lea 2592(a1),a2
  4583.  
  4584. AmmoDrain:
  4585.  move.b #0,(a1)
  4586.  move.b #0,8(a1)
  4587.  move.b #0,(a2)
  4588.  move.b #0,8(a2)
  4589.  add.w #16,a1
  4590.  add.w #16,a2
  4591.  move.b #0,(a1)
  4592.  move.b #0,8(a1)
  4593.  move.b #0,(a2)
  4594.  move.b #0,8(a2)
  4595.  add.w #16,a1
  4596.  add.w #16,a2
  4597.  subq #1,d2
  4598.  bgt.s AmmoDrain
  4599.  
  4600.  move.w Ammo,OldAmmo
  4601.  
  4602.  rts 
  4603.  
  4604. nulop:
  4605.  move.w #$0010,$dff000+intreq
  4606.  rte
  4607.  
  4608. doanything: dc.w 0
  4609.  
  4610. end:
  4611.  
  4612.  move.w PLR1_energy,Energy
  4613.  cmp.b #'s',mors
  4614.  bne.s .notsl
  4615.  move.w PLR2_energy,Energy
  4616. .notsl:
  4617.  
  4618.  bsr EnergyBar
  4619.  
  4620.  move.l drawpt,d0
  4621.  move.l olddrawpt,drawpt
  4622.  move.l d0,olddrawpt
  4623.  move.l d0,$dff084
  4624.  
  4625.  
  4626.  clr.b doanything
  4627.  cmp.b #'b',Prefsfile+3
  4628.  bne.s .noback
  4629.  jsr mt_end
  4630. .noback
  4631.  tst.w Energy
  4632.  bgt.s wevewon
  4633.  
  4634.  move.l #gameover,mt_data
  4635.  st UseAllChannels
  4636.  clr.b reachedend
  4637.  jsr mt_init
  4638. playgameover:
  4639.  move.l #$dff000,a6
  4640. waitfortop2:
  4641.  btst.b #0,intreqrl(a6)
  4642.  beq waitfortop2
  4643.  move.w #$1,intreq(a6)
  4644.  
  4645.  jsr mt_music
  4646.  
  4647.  tst.b reachedend
  4648.  beq.s playgameover
  4649.  
  4650.  bra wevelost
  4651.  
  4652.  
  4653. wevewon:
  4654.  
  4655.  cmp.b #'n',mors
  4656.  bne.s .nonextlev
  4657.  add.w #1,MAXLEVEL
  4658.  st FINISHEDLEVEL
  4659. .nonextlev:
  4660.  
  4661.  move.l #welldone,mt_data
  4662.  st UseAllChannels
  4663.  clr.b reachedend
  4664.  jsr mt_init
  4665. playwelldone:
  4666.  move.l #$dff000,a6
  4667. waitfortop3:
  4668.  btst.b #0,intreqrl(a6)
  4669.  beq waitfortop3
  4670.  move.w #$1,intreq(a6)
  4671.  
  4672.  jsr mt_music
  4673.  
  4674.  tst.b reachedend
  4675.  beq.s playwelldone
  4676.  
  4677.  cmp.w #16,MAXLEVEL
  4678.  bne .noendgame
  4679.  jsr ENDGAMESCROLL
  4680. .noendgame:
  4681.  
  4682. wevelost:
  4683.  jmp closeeverything 
  4684.  
  4685. endnomusic
  4686.  clr.b doanything
  4687.  cmp.b #'b',Prefsfile+3
  4688.  bne.s .noback
  4689.  jsr mt_end
  4690. .noback
  4691. *******************************
  4692. ; cmp.b #'n',mors
  4693. ; bne.s .nonextlev
  4694. ; cmp.w #15,MAXLEVEL
  4695. ; bge.s .nonextlev
  4696. ; add.w #1,MAXLEVEL
  4697. ; st FINISHEDLEVEL
  4698. ;.nonextlev:
  4699. ******************************
  4700.  
  4701.  jmp closeeverything
  4702.  
  4703. do32:
  4704.  move.w #31,d7
  4705.  move.w #$180,d1
  4706. across:
  4707.  move.w d1,(a1)+
  4708.  move.w d1,(a3)+
  4709.  move.w #0,(a1)+ 
  4710.  move.w #0,(a3)+
  4711.  add.w #2,d1
  4712.  dbra d7,across
  4713.  rts
  4714.  
  4715. ENDGAMESCROLL:
  4716.  include "endscroll.s"
  4717.  
  4718. ***********************************
  4719.  include "ab3:source/CD32JOY"
  4720.  
  4721.  
  4722.  
  4723. *************************************
  4724. * Set left and right clip values
  4725. *************************************
  4726.  
  4727.  
  4728.  
  4729. NEWsetlclip:
  4730.  move.l #OnScreen,a1
  4731.  move.l #Rotated,a2
  4732.  move.l CONNECT_TABLE,a3
  4733.  
  4734.  move.w (a0),d0
  4735.  bge.s .notignoreleft
  4736.  
  4737. ; move.l #0,(a6)
  4738.  
  4739.  bra .leftnotoktoclip
  4740. .notignoreleft:
  4741.  
  4742.  move.w 6(a2,d0*8),d3    ; left z val
  4743.  bgt.s .leftclipinfront
  4744.  addq #2,a0
  4745.  rts
  4746.  
  4747.  tst.w 6(a2,d0*8)
  4748.  bgt.s .leftnotoktoclip
  4749. .ignoreboth:
  4750. ; move.l #0,(a6)
  4751. ; move.l #96*65536,4(a6)
  4752.  move.w #0,leftclip
  4753.  move.w #96,rightclip
  4754.  addq #8,a6
  4755.  addq #2,a0
  4756.  rts
  4757.  
  4758. .leftclipinfront:
  4759.  move.w (a1,d0*2),d1    ; left x on screen
  4760.  move.w (a0),d2
  4761.  move.w 2(a3,d2.w*4),d2
  4762.  move.w (a1,d2.w*2),d2
  4763.  cmp.w d1,d2
  4764.  bgt.s .leftnotoktoclip
  4765.  
  4766. ; move.w d1,(a6)
  4767. ; move.w d3,2(a6)
  4768.  cmp.w leftclip,d1
  4769.  ble.s .leftnotoktoclip
  4770.  move.w d1,leftclip
  4771. .leftnotoktoclip:
  4772.  
  4773.  addq #2,a0
  4774.  
  4775.  rts
  4776.  
  4777. NEWsetrclip
  4778.  move.l #OnScreen,a1
  4779.  move.l #Rotated,a2
  4780.  move.l CONNECT_TABLE,a3
  4781.  move.w (a0),d0
  4782.  bge.s .notignoreright
  4783. ; move.w #96,4(a6)
  4784. ; move.w #0,6(a6)
  4785.  move.w #0,d4
  4786.  bra .rightnotoktoclip
  4787. .notignoreright:
  4788.  move.w 6(a2,d0*8),d4    ; right z val
  4789.  bgt.s .rightclipinfront
  4790. ; move.w #96,4(a6)
  4791. ; move.w #0,6(a6)
  4792.  bra.s .rightnotoktoclip
  4793.  
  4794. .rightclipinfront:
  4795.  move.w (a1,d0*2),d1    ; right x on screen
  4796.  move.w (a0),d2
  4797.  move.w (a3,d2.w*4),d2
  4798.  move.w (a1,d2.w*2),d2
  4799.  cmp.w d1,d2
  4800.  blt.s .rightnotoktoclip
  4801. ; move.w d1,4(a6)
  4802. ; move.w d4,6(a6)
  4803.  
  4804.  cmp.w rightclip,d1
  4805.  bge.s .rightnotoktoclip
  4806.  addq #1,d1
  4807.  move.w d1,rightclip
  4808. .rightnotoktoclip:
  4809.  addq #8,a6
  4810.  addq #2,a0
  4811.  rts
  4812.  
  4813. FIRSTsetlrclip:
  4814.  move.l #OnScreen,a1
  4815.  move.l #Rotated,a2
  4816.  
  4817.  move.w (a0)+,d0
  4818.  bge.s .notignoreleft
  4819.  bra .leftnotoktoclip
  4820. .notignoreleft:
  4821.  
  4822.  move.w 6(a2,d0*8),d3    ; left z val
  4823.  bgt.s .leftclipinfront
  4824.  
  4825.  move.w (a0),d0
  4826.  blt.s .ignoreboth
  4827.  tst.w 6(a2,d0*8)
  4828.  bgt.s .leftnotoktoclip
  4829. .ignoreboth
  4830.  move.w #96,rightclip
  4831.  move.w #0,leftclip
  4832.  addq #2,a0
  4833.  rts
  4834.  
  4835. .leftclipinfront:
  4836.  move.w (a1,d0*2),d1    ; left x on screen
  4837.  cmp.w leftclip,d1
  4838.  ble.s .leftnotoktoclip
  4839.  move.w d1,leftclip
  4840. .leftnotoktoclip:
  4841.  
  4842.  move.w (a0)+,d0
  4843.  bge.s .notignoreright
  4844.  move.w #0,d4
  4845.  bra .rightnotoktoclip
  4846. .notignoreright:
  4847.  move.w 6(a2,d0*8),d4    ; right z val
  4848.  ble.s .rightnotoktoclip
  4849.  
  4850. .rightclipinfront:
  4851.  move.w (a1,d0*2),d1    ; right x on screen
  4852.  addq #1,d1
  4853.  cmp.w rightclip,d1
  4854.  bge.s .rightnotoktoclip
  4855.  move.w d1,rightclip
  4856. .rightnotoktoclip:
  4857.  
  4858. ; move.w leftclip,d0
  4859. ; move.w rightclip,d1
  4860. ; cmp.w d0,d1
  4861. ; bge.s .noswap
  4862. ; move.w #96,rightclip
  4863. ; move.w #0,leftclip
  4864. ;.noswap:
  4865.  
  4866.  rts
  4867.  
  4868.  
  4869. leftclip2: dc.w 0
  4870. rightclip2: dc.w 0
  4871. ZoneBright: dc.w 0
  4872.  
  4873. npolys: dc.w 0
  4874.  
  4875. PLR1_fire: dc.b 0
  4876. PLR2_fire: dc.b 0
  4877.  
  4878. *****************************************************
  4879.  
  4880.  
  4881. pastdata:
  4882. ***********************************
  4883. * This routine animates brightnesses.
  4884.  
  4885.  
  4886. liftpt: dc.l liftanimtab
  4887.  
  4888. brightpt:
  4889.  dc.l brightanimtab
  4890.  
  4891.  
  4892. liftanim:
  4893.  rts
  4894.  
  4895. ******************************
  4896.  include "ab3:source/ObjectMove"
  4897.  include "ab3:source/Anims"
  4898. ******************************
  4899. startpass:
  4900. ; include "ab3:source/password_reloc.s"
  4901. endpass:
  4902.  
  4903. rotanimpt: dc.w 0
  4904. xradd: dc.w 5
  4905. yradd: dc.w 8
  4906. xrpos: dc.w 320
  4907. yrpos: dc.w 320
  4908.  
  4909. rotanim:
  4910.  rts
  4911.  
  4912. option:
  4913.  dc.l 0,0
  4914.  
  4915. ********** WALL STUFF *******************************
  4916.  
  4917.  include "AB3:source/wallroutine3.chipmem"
  4918.  
  4919. *****************************************************
  4920.  
  4921. ******************************************
  4922. * floor polygon
  4923.  
  4924. numsidestd: dc.w 0
  4925. bottomline: dc.w 0
  4926.  
  4927. checkforwater:
  4928.  tst.b usewater
  4929.  beq.s .notwater
  4930.  
  4931.  move.l Roompt,a1
  4932.  move.w (a1),d7
  4933.  cmp.w currzone,d7
  4934.  bne.s .notwater
  4935.  
  4936.  move.b #$f,fillscrnwater
  4937.  
  4938. .notwater:
  4939.  move.w (a0)+,d6    ; sides-1
  4940.  add.w d6,d6
  4941.  add.w d6,a0
  4942.  add.w #4+6,a0
  4943.  rts
  4944.  
  4945.  rts
  4946.  
  4947. NewCornerBuff:
  4948.  ds.l 100
  4949. CLRNOFLOOR: dc.w 0
  4950.  
  4951. itsafloordraw:
  4952.  
  4953. * If D0 =1 then its a floor otherwise (=2) it's
  4954. * a roof.
  4955.  
  4956.  move.w #0,above
  4957.  move.w (a0)+,d6    ; ypos of poly
  4958.  
  4959.  move.w d6,d7
  4960.  ext.l d7
  4961.  asl.l #6,d7
  4962.  cmp.l TOPOFROOM,d7
  4963.  blt checkforwater
  4964.  cmp.l BOTOFROOM,d7
  4965.  bgt.s dontdrawreturn
  4966.  
  4967.  move.w leftclip(pc),d7
  4968.  cmp.w rightclip(pc),d7
  4969.  bge.s dontdrawreturn
  4970.  
  4971.  move.w botclip,d7
  4972.  sub.w #40,d7
  4973.  ble.s dontdrawreturn
  4974.  sub.w flooryoff,d6
  4975.  bgt.s below
  4976.  blt.s aboveplayer
  4977.  
  4978.  tst.b usewater
  4979.  beq.s .notwater
  4980.  
  4981.  move.l Roompt,a1
  4982.  move.w (a1),d7
  4983.  cmp.w currzone,d7
  4984.  
  4985.  bne.s .notwater
  4986.  
  4987.  st fillscrnwater
  4988.  
  4989. .notwater:
  4990.  
  4991.  
  4992. dontdrawreturn:
  4993.  move.w (a0)+,d6    ; sides-1
  4994.  add.w d6,d6
  4995.  add.w d6,a0
  4996.  add.w #4+6,a0
  4997.  rts
  4998. aboveplayer:
  4999.  
  5000.  tst.b usewater
  5001.  beq.s .notwater
  5002.  
  5003.  move.l Roompt,a1
  5004.  move.w (a1),d7
  5005.  cmp.w currzone,d7
  5006.  bne.s .notwater
  5007.  
  5008.  move.b #$f,fillscrnwater
  5009.  
  5010. .notwater:
  5011.  
  5012.  btst #1,d0
  5013.  beq.s dontdrawreturn
  5014.  move.w #40,d7
  5015.  sub.w topclip,d7 
  5016.  ble.s dontdrawreturn
  5017.  move.w #1,d0
  5018.  move.w d0,above
  5019.  neg.w d6
  5020. below:
  5021.  btst #0,d0
  5022.  beq.s dontdrawreturn
  5023.  move.w d6,distaddr
  5024.  muls #64,d6
  5025.  move.l d6,ypos
  5026.  divs d7,d6        ; zpos of bottom
  5027.             ; visible line
  5028.  move.w d6,minz
  5029.  move.w d7,bottomline
  5030.  
  5031. ; Go round each point finding out
  5032. ; if it should be visible or not.
  5033.  
  5034.  move.l a0,-(a7)
  5035.  
  5036.  move.w (a0)+,d7    ; number of sides
  5037.  move.l #Rotated,a1
  5038.  move.l #OnScreen,a2
  5039.  move.l #NewCornerBuff,a3
  5040.  moveq #0,d4
  5041.  moveq #0,d5
  5042.  moveq #0,d6
  5043.  clr.b anyclipping
  5044.  
  5045. cornerprocessloop:
  5046.  
  5047.  move.w (a0)+,d0
  5048.  move.w 6(a1,d0.w*8),d1
  5049.  ble  .canttell
  5050.  
  5051.  move.w (a2,d0.w*2),d3
  5052.  cmp.w leftclip,d3
  5053.  bgt.s .nol
  5054.  st d4
  5055.  st anyclipping
  5056.  bra.s .nos
  5057. .nol:
  5058.  cmp.w rightclip,d3
  5059.  blt.s .nor
  5060.  st d6
  5061.  st anyclipping
  5062.  bra.s .nos
  5063. .nor:
  5064.  st d5
  5065. .nos:
  5066.  bra .cantell
  5067.  
  5068. .canttell:
  5069.  st d5
  5070.  st anyclipping
  5071.  
  5072. .cantell:
  5073.  
  5074.  
  5075.  dbra d7,cornerprocessloop
  5076.  
  5077.  move.l (a7)+,a0
  5078.  tst.b d5
  5079.  bne.s somefloortodraw
  5080.  eor.b d4,d6
  5081.  bne dontdrawreturn
  5082.  
  5083. somefloortodraw:
  5084.  
  5085.  tst.b gourfloor
  5086.  bne goursides
  5087.  
  5088.  move.w #80,top
  5089.  move.w #-1,bottom
  5090.  move.w #0,drawit
  5091.  move.l #Rotated,a1
  5092.  move.l #OnScreen,a2
  5093.  move.w (a0)+,d7    ; no of sides
  5094. sideloop:
  5095.  move.w minz,d6
  5096.  move.w (a0)+,d1
  5097.  move.w (a0),d3
  5098.  move.w 6(a1,d1*8),d4    ;first z
  5099.  cmp.w d6,d4
  5100.  bgt firstinfront
  5101.  move.w 6(a1,d3*8),d5    ; sec z
  5102.  cmp.w d6,d5
  5103.  ble bothbehind
  5104. ** line must be on left and partially behind.
  5105.  sub.w d5,d4
  5106.  move.l (a1,d1*8),d0
  5107.  sub.l (a1,d3*8),d0
  5108.  asr.l #7,d0
  5109.  sub.w d5,d6
  5110.  muls d6,d0    ; new x coord
  5111.  divs d4,d0
  5112.  ext.l d0
  5113.  asl.l #7,d0
  5114.  
  5115.  add.l (a1,d3*8),d0
  5116.  move.w minz,d4
  5117.  move.w (a2,d3*2),d2
  5118.  divs d4,d0
  5119.  add.w #47,d0
  5120.  move.l ypos,d3
  5121.  divs d5,d3
  5122.  move.w bottomline,d1 
  5123.  bra lineclipped
  5124.  
  5125. firstinfront:
  5126.  move.w 6(a1,d3*8),d5    ; sec z
  5127.  cmp.w d6,d5
  5128.  bgt bothinfront
  5129. ** line must be on right and partially behind.
  5130.  sub.w d4,d5    ; dz
  5131.  move.l (a1,d3*8),d2
  5132.  sub.l (a1,d1*8),d2    ; dx
  5133.  sub.w d4,d6
  5134.  asr.l #7,d2
  5135.  muls d6,d2    ; new x coord
  5136.  divs d5,d2
  5137.  ext.l d2
  5138.  asl.l #7,d2
  5139.  add.l (a1,d1*8),d2
  5140.  move.w minz,d5
  5141.  move.w (a2,d1*2),d0
  5142.  divs d5,d2
  5143.  add.w #47,d2
  5144.  move.l ypos,d1
  5145.  divs d4,d1
  5146.  move.w bottomline,d3 
  5147.  bra lineclipped
  5148.  
  5149. bothinfront:
  5150.  
  5151. * Also, usefully enough, both are on-screen
  5152. * so no bottom clipping is needed.
  5153.  
  5154.  move.w (a2,d1*2),d0    ; first x
  5155.  move.w (a2,d3*2),d2    ; second x
  5156.  move.l ypos,d1
  5157.  move.l d1,d3
  5158.  divs d4,d1        ; first y
  5159.  divs d5,d3        ; second y
  5160. lineclipped:
  5161.  move.l #rightsidetab,a3
  5162.  cmp.w d1,d3
  5163.  beq lineflat
  5164.  st drawit
  5165.  bgt lineonright
  5166.  move.l #leftsidetab,a3
  5167.  exg d1,d3
  5168.  exg d0,d2
  5169.  
  5170.  lea (a3,d1*2),a3
  5171.  
  5172.  cmp.w top(pc),d1
  5173.  bge.s .nonewtop
  5174.  move.w d1,top
  5175. .nonewtop:
  5176.  cmp.w bottom(pc),d3
  5177.  ble.s .nonewbot
  5178.  move.w d3,bottom
  5179. .nonewbot:
  5180.  
  5181.  sub.w d1,d3    ; dy
  5182.  sub.w d0,d2    ; dx
  5183.  
  5184.  blt .linegoingleft
  5185.  sub.w #1,d0
  5186.  
  5187.  ext.l d2
  5188.  divs d3,d2
  5189.  move.w d2,d6
  5190.  swap d2
  5191.  
  5192. ; moveq #0,d6
  5193. ; sub.w d3,d2
  5194. ; blt.s .noco
  5195. ;.makeco
  5196. ; addq #1,d6
  5197. ; sub.w d3,d2
  5198. ; bge.s .makeco
  5199. ;.noco
  5200. ; add.w d3,d2
  5201.  
  5202.  move.w d3,d4
  5203.  move.w d3,d5
  5204.  subq #1,d5
  5205.  move.w d6,d1
  5206.  addq #1,d1
  5207.  
  5208. .pixlopright:
  5209.  move.w d0,(a3)+
  5210.  sub.w d2,d4
  5211.  bge.s .nobigstep
  5212.  add.w d1,d0
  5213.  add.w d3,d4
  5214.  dbra d5,.pixlopright
  5215.  bra lineflat
  5216. .nobigstep
  5217.  add.w d6,d0
  5218.  dbra d5,.pixlopright
  5219.  bra lineflat
  5220.  
  5221. .linegoingleft:
  5222.  
  5223.  sub.w #1,d0
  5224.  
  5225.  neg.w d2
  5226.  
  5227.  ext.l d2
  5228.  divs d3,d2
  5229.  move.w d2,d6
  5230.  swap d2
  5231.  
  5232.  
  5233. ; moveq #0,d6
  5234. ; sub.w d3,d2
  5235. ; blt.s .nocol
  5236. ;.makecol
  5237. ; addq #1,d6
  5238. ; sub.w d3,d2
  5239. ; bge.s .makecol
  5240. ;.nocol
  5241. ; add.w d3,d2
  5242.  
  5243.  
  5244.  
  5245.  move.w d3,d4
  5246.  move.w d3,d5
  5247.  subq #1,d5
  5248.  
  5249.  move.w d6,d1
  5250.  addq #1,d1
  5251.  
  5252. .pixlopleft:
  5253.  sub.w d2,d4
  5254.  bge.s .nobigstepl
  5255.  sub.w d1,d0
  5256.  add.w d3,d4
  5257.  move.w d0,(a3)+
  5258.  dbra d5,.pixlopleft
  5259.  bra lineflat
  5260.  
  5261. .nobigstepl
  5262.  sub.w d6,d0
  5263.  move.w d0,(a3)+
  5264.  dbra d5,.pixlopleft
  5265.  bra lineflat
  5266.  
  5267. lineonright:
  5268.  
  5269.  lea (a3,d1*2),a3
  5270.  
  5271.  cmp.w top(pc),d1
  5272.  bge.s .nonewtop
  5273.  move.w d1,top
  5274. .nonewtop:
  5275.  cmp.w bottom(pc),d3
  5276.  ble.s .nonewbot
  5277.  move.w d3,bottom
  5278. .nonewbot:
  5279.  
  5280.  sub.w d1,d3    ; dy
  5281.  sub.w d0,d2    ; dx
  5282.  blt .linegoingleft
  5283. ; addq #1,d0
  5284.  ext.l d2
  5285.  divs d3,d2
  5286.  move.w d2,d6
  5287.  swap d2
  5288.  
  5289. ; moveq #0,d6
  5290. ; sub.w d3,d2
  5291. ; blt.s .noco
  5292. ;.makeco
  5293. ; addq #1,d6
  5294. ; sub.w d3,d2
  5295. ; bge.s .makeco
  5296. ;.noco
  5297. ; add.w d3,d2
  5298.  
  5299.  move.w d3,d4
  5300.  move.w d3,d5
  5301.  subq #1,d5
  5302.  move.w d6,d1
  5303.  addq #1,d1
  5304.  
  5305. .pixlopright:
  5306.  sub.w d2,d4
  5307.  bge.s .nobigstep
  5308.  add.w d1,d0
  5309.  add.w d3,d4
  5310.  move.w d0,(a3)+
  5311.  dbra d5,.pixlopright
  5312.  bra lineflat
  5313.  
  5314. .nobigstep
  5315.  add.w d6,d0
  5316.  move.w d0,(a3)+
  5317.  dbra d5,.pixlopright
  5318.  bra lineflat
  5319.  
  5320. .linegoingleft:
  5321. ; addq #1,d0
  5322.  neg.w d2
  5323.  
  5324.  ext.l d2
  5325.  divs d3,d2
  5326.  move.w d2,d6
  5327.  swap d2
  5328.  
  5329.  
  5330. ; moveq #0,d6
  5331. ; sub.w d3,d2
  5332. ; blt.s .nocol
  5333. ;.makecol
  5334. ; addq #1,d6
  5335. ; sub.w d3,d2
  5336. ; bge.s .makecol
  5337. ;.nocol
  5338. ; add.w d3,d2
  5339.  
  5340.  move.w d3,d4
  5341.  move.w d3,d5
  5342.  subq #1,d5
  5343.  move.w d6,d1
  5344.  addq #1,d1
  5345.  
  5346. .pixlopleft:
  5347.  move.w d0,(a3)+
  5348.  sub.w d2,d4
  5349.  bge.s .nobigstepl
  5350.  sub.w d1,d0
  5351.  add.w d3,d4
  5352.  dbra d5,.pixlopleft
  5353.  bra lineflat
  5354.  
  5355. .nobigstepl
  5356.  sub.w d6,d0
  5357.  dbra d5,.pixlopleft
  5358.  
  5359. lineflat:
  5360.  
  5361. bothbehind:
  5362.  dbra d7,sideloop
  5363.  bra pastsides
  5364.  
  5365. fbr: dc.w 0
  5366. sbr: dc.w 0
  5367.  
  5368. goursides:
  5369.  
  5370.  move.w #80,top
  5371.  move.w #-1,bottom
  5372.  move.w #0,drawit
  5373.  move.l #Rotated,a1
  5374.  move.l #OnScreen,a2
  5375.  move.w (a0)+,d7    ; no of sides
  5376. sideloopGOUR:
  5377.  move.w minz,d6
  5378.  move.w (a0)+,d1
  5379.  move.w (a0),d3
  5380.  
  5381.  move.l PointBrightsPtr,a4
  5382.  move.w (a4,d1.w*4),fbr
  5383.  move.w (a4,d3.w*4),sbr
  5384.  
  5385.  move.w 6(a1,d1*8),d4    ;first z
  5386.  cmp.w d6,d4
  5387.  bgt firstinfrontGOUR
  5388.  move.w 6(a1,d3*8),d5    ; sec z
  5389.  cmp.w d6,d5
  5390.  ble bothbehindGOUR
  5391. ** line must be on left and partially behind.
  5392.  sub.w d5,d4
  5393.  
  5394.  move.w fbr,d0
  5395.  sub.w sbr,d0
  5396.  sub.w d5,d6
  5397.  muls d6,d0
  5398.  divs d4,d0
  5399.  add.w sbr,d0
  5400.  move.w d0,fbr
  5401.  
  5402.  move.l (a1,d1*8),d0
  5403.  sub.l (a1,d3*8),d0
  5404.  asr.l #7,d0
  5405.  muls d6,d0    ; new x coord
  5406.  divs d4,d0
  5407.  ext.l d0
  5408.  asl.l #7,d0
  5409.  
  5410.  add.l (a1,d3*8),d0
  5411.  move.w minz,d4
  5412.  move.w (a2,d3*2),d2
  5413.  divs d4,d0
  5414.  add.w #47,d0
  5415.  move.l ypos,d3
  5416.  divs d5,d3
  5417.  
  5418.  move.w bottomline,d1 
  5419.  bra lineclippedGOUR
  5420.  
  5421. firstinfrontGOUR:
  5422.  move.w 6(a1,d3*8),d5    ; sec z
  5423.  cmp.w d6,d5
  5424.  bgt bothinfrontGOUR
  5425. ** line must be on right and partially behind.
  5426.  sub.w d4,d5    ; dz
  5427.  
  5428.  move.w sbr,d2
  5429.  sub.w fbr,d2
  5430.  sub.w d4,d6
  5431.  muls d6,d2
  5432.  divs d5,d2
  5433.  add.w fbr,d2
  5434.  move.w d2,sbr
  5435.  
  5436.  move.l (a1,d3*8),d2
  5437.  sub.l (a1,d1*8),d2    ; dx
  5438.  asr.l #7,d2
  5439.  muls d6,d2    ; new x coord
  5440.  divs d5,d2
  5441.  ext.l d2
  5442.  asl.l #7,d2
  5443.  add.l (a1,d1*8),d2
  5444.  move.w minz,d5
  5445.  move.w (a2,d1*2),d0
  5446.  divs d5,d2
  5447.  add.w #47,d2
  5448.  move.l ypos,d1
  5449.  divs d4,d1
  5450.  move.w bottomline,d3 
  5451.  bra lineclippedGOUR
  5452.  
  5453. bothinfrontGOUR:
  5454.  
  5455. * Also, usefully enough, both are on-screen
  5456. * so no bottom clipping is needed.
  5457.  
  5458.  move.w (a2,d1*2),d0    ; first x
  5459.  move.w (a2,d3*2),d2    ; second x
  5460.  move.l ypos,d1
  5461.  move.l d1,d3
  5462.  divs d4,d1        ; first y
  5463.  divs d5,d3        ; second y
  5464. lineclippedGOUR:
  5465.  move.l #rightsidetab,a3
  5466.  cmp.w d1,d3
  5467.  bne linenotflatGOUR
  5468.  
  5469. ; move.w fbr,d4
  5470. ; move.w sbr,d5
  5471. ; cmp.w d0,d2
  5472. ; bgt.s .nsw
  5473. ; exg d4,d5
  5474. ;.nsw:
  5475.  
  5476. ; move.l #leftbrighttab,a3
  5477. ; move.w d4,(a3,d3.w)
  5478. ; move.l #rightbrighttab,a3
  5479. ; move.w d5,(a3,d3.w) 
  5480.  bra lineflatGOUR
  5481.  
  5482. linenotflatGOUR
  5483.  st drawit
  5484.  bgt lineonrightGOUR
  5485.  move.l #leftsidetab,a3
  5486.  exg d1,d3
  5487.  exg d0,d2
  5488.  
  5489.  lea (a3,d1*2),a3
  5490.  lea leftbrighttab-leftsidetab(a3),a4
  5491.  
  5492.  cmp.w top(pc),d1
  5493.  bge.s .nonewtop
  5494.  move.w d1,top
  5495. .nonewtop:
  5496.  cmp.w bottom(pc),d3
  5497.  ble.s .nonewbot
  5498.  move.w d3,bottom
  5499. .nonewbot:
  5500.  
  5501.  sub.w d1,d3    ; dy
  5502.  sub.w d0,d2    ; dx
  5503.  
  5504.  blt .linegoingleft
  5505.  sub.w #1,d0
  5506.  
  5507.  ext.l d2
  5508.  divs d3,d2
  5509.  move.w d2,d6
  5510.  swap d2
  5511.  move.w d2,a5
  5512.  
  5513. ; moveq #0,d6
  5514. ; sub.w d3,d2
  5515. ; blt.s .noco
  5516. ;.makeco
  5517. ; addq #1,d6
  5518. ; sub.w d3,d2
  5519. ; bge.s .makeco
  5520. ;.noco
  5521. ; add.w d3,d2
  5522.  
  5523.  move.w d3,d4
  5524.  move.w d3,d5
  5525.  subq #1,d5
  5526.  move.w d6,d1
  5527.  addq #1,d1
  5528.  move.w d1,a6
  5529.  
  5530.  moveq #0,d1
  5531.  move.w sbr,d1
  5532.  move.w fbr,d2
  5533.  sub.w d1,d2
  5534.  ext.l d2
  5535.  asl.w #8,d2
  5536.  asl.w #3,d2
  5537.  divs d3,d2 
  5538.  ext.l d2
  5539.  asl.l #5,d2
  5540.  swap d1
  5541.  
  5542. .pixlopright:
  5543.  move.w d0,(a3)+
  5544.  swap d1
  5545.  move.w d1,(a4)+
  5546.  swap d1
  5547.  add.l d2,d1
  5548.  
  5549.  sub.w a5,d4
  5550.  bge.s .nobigstep
  5551.  add.w a6,d0
  5552.  add.w d3,d4
  5553.  dbra d5,.pixlopright
  5554.  bra lineflatGOUR
  5555. .nobigstep
  5556.  
  5557.  add.w d6,d0
  5558.  dbra d5,.pixlopright
  5559.  bra lineflatGOUR
  5560.  
  5561. .linegoingleft:
  5562.  
  5563.  sub.w #1,d0
  5564.  
  5565.  neg.w d2
  5566.  
  5567.  ext.l d2
  5568.  divs d3,d2
  5569.  move.w d2,d6
  5570.  swap d2
  5571.  
  5572.  
  5573. ; moveq #0,d6
  5574. ; sub.w d3,d2
  5575. ; blt.s .nocol
  5576. ;.makecol
  5577. ; addq #1,d6
  5578. ; sub.w d3,d2
  5579. ; bge.s .makecol
  5580. ;.nocol
  5581. ; add.w d3,d2
  5582.  
  5583.  move.w d3,d4
  5584.  move.w d3,d5
  5585.  subq #1,d5
  5586.  
  5587.  move.w d6,d1
  5588.  addq #1,d1
  5589.  move.w d1,a6
  5590.  move.w d2,a5
  5591.  
  5592.  moveq #0,d1
  5593.  move.w sbr,d1
  5594.  move.w fbr,d2
  5595.  sub.w d1,d2
  5596.  ext.l d2
  5597.  asl.w #8,d2
  5598.  asl.w #3,d2
  5599.  divs d3,d2 
  5600.  ext.l d2
  5601.  asl.l #5,d2
  5602.  swap d1
  5603.  
  5604. .pixlopleft:
  5605.  
  5606.  swap d1
  5607.  move.w d1,(a4)+
  5608.  swap d1
  5609.  add.l d2,d1
  5610.  
  5611.  sub.w a5,d4
  5612.  bge.s .nobigstepl
  5613.  sub.w a6,d0
  5614.  add.w d3,d4
  5615.  move.w d0,(a3)+
  5616.  dbra d5,.pixlopleft
  5617.  bra lineflatGOUR
  5618.  
  5619. .nobigstepl
  5620.  sub.w d6,d0
  5621.  move.w d0,(a3)+
  5622.  dbra d5,.pixlopleft
  5623.  bra lineflatGOUR
  5624.  
  5625. lineonrightGOUR:
  5626.  
  5627.  lea (a3,d1*2),a3
  5628.  
  5629.  lea rightbrighttab-rightsidetab(a3),a4
  5630.  
  5631.  cmp.w top(pc),d1
  5632.  bge.s .nonewtop
  5633.  move.w d1,top
  5634. .nonewtop:
  5635.  cmp.w bottom(pc),d3
  5636.  ble.s .nonewbot
  5637.  move.w d3,bottom
  5638. .nonewbot:
  5639.  
  5640.  sub.w d1,d3    ; dy
  5641.  sub.w d0,d2    ; dx
  5642.  blt .linegoingleft
  5643. ; addq #1,d0
  5644.  ext.l d2
  5645.  divs d3,d2
  5646.  move.w d2,d6
  5647.  swap d2
  5648.  
  5649. ; moveq #0,d6
  5650. ; sub.w d3,d2
  5651. ; blt.s .noco
  5652. ;.makeco
  5653. ; addq #1,d6
  5654. ; sub.w d3,d2
  5655. ; bge.s .makeco
  5656. ;.noco
  5657. ; add.w d3,d2
  5658.  
  5659.  move.w d3,d4
  5660.  move.w d3,d5
  5661.  subq #1,d5
  5662.  move.w d6,d1
  5663.  addq #1,d1
  5664.  
  5665.  move.w d1,a6
  5666.  move.w d2,a5
  5667.  
  5668.  moveq #0,d1
  5669.  move.w fbr,d1
  5670.  move.w sbr,d2
  5671.  sub.w d1,d2
  5672.  ext.l d2
  5673.  asl.w #8,d2
  5674.  asl.w #3,d2
  5675.  divs d3,d2 
  5676.  ext.l d2
  5677.  asl.l #5,d2
  5678.  swap d1
  5679.  
  5680. .pixlopright:
  5681.  
  5682.  swap d1
  5683.  move.w d1,(a4)+
  5684.  swap d1
  5685.  add.l d2,d1
  5686.  
  5687.  sub.w a5,d4
  5688.  bge.s .nobigstep
  5689.  add.w a6,d0
  5690.  add.w d3,d4
  5691.  move.w d0,(a3)+
  5692.  dbra d5,.pixlopright
  5693.  bra lineflatGOUR
  5694.  
  5695. .nobigstep
  5696.  add.w d6,d0
  5697.  move.w d0,(a3)+
  5698.  dbra d5,.pixlopright
  5699.  bra lineflatGOUR
  5700.  
  5701. .linegoingleft:
  5702. ; addq #1,d0
  5703.  neg.w d2
  5704.  
  5705.  ext.l d2
  5706.  divs d3,d2
  5707.  move.w d2,d6
  5708.  swap d2
  5709.  
  5710.  
  5711. ; moveq #0,d6
  5712. ; sub.w d3,d2
  5713. ; blt.s .nocol
  5714. ;.makecol
  5715. ; addq #1,d6
  5716. ; sub.w d3,d2
  5717. ; bge.s .makecol
  5718. ;.nocol
  5719. ; add.w d3,d2
  5720.  
  5721.  move.w d3,d4
  5722.  move.w d3,d5
  5723.  subq #1,d5
  5724.  move.w d6,d1
  5725.  addq #1,d1
  5726.  move.w d1,a6
  5727.  move.w d2,a5
  5728.  
  5729.  moveq #0,d1
  5730.  move.w fbr,d1
  5731.  move.w sbr,d2
  5732.  sub.w d1,d2
  5733.  ext.l d2
  5734.  asl.w #8,d2
  5735.  asl.w #3,d2
  5736.  divs d3,d2 
  5737.  ext.l d2
  5738.  asl.l #5,d2
  5739.  swap d1
  5740.  
  5741. .pixlopleft:
  5742.  
  5743.  swap d1
  5744.  move.w d1,(a4)+
  5745.  swap d1
  5746.  add.l d2,d1
  5747.  
  5748.  move.w d0,(a3)+
  5749.  sub.w a5,d4
  5750.  bge.s .nobigstepl
  5751.  sub.w a6,d0
  5752.  add.w d3,d4
  5753.  dbra d5,.pixlopleft
  5754.  bra lineflatGOUR
  5755.  
  5756. .nobigstepl
  5757.  sub.w d6,d0
  5758.  dbra d5,.pixlopleft
  5759.  
  5760. lineflatGOUR:
  5761.  
  5762. bothbehindGOUR:
  5763.  dbra d7,sideloopGOUR
  5764.  
  5765. pastsides:
  5766.  
  5767.  
  5768.  addq #2,a0
  5769.  
  5770.  move.w #104*4,linedir
  5771.  move.l frompt,a6
  5772.  add.l #104*4*41,a6
  5773.  move.w (a0)+,scaleval
  5774.  move.w (a0)+,whichtile
  5775.  move.w (a0)+,d6
  5776.  add.w ZoneBright,d6
  5777.  move.w d6,lighttype
  5778.  move.w above(pc),d6
  5779.  beq groundfloor
  5780. * on ceiling:
  5781.  move.w #-104*4,linedir
  5782.  suba.w #104*4,a6
  5783. groundfloor:
  5784.  
  5785.  move.w xoff,d6
  5786.  move.w zoff,d7
  5787.  add.w xwobxoff,d7
  5788.  add.w xwobzoff,d6
  5789.  swap d6
  5790.  swap d7
  5791.  clr.w d6
  5792.  clr.w d7
  5793.  move.w scaleval(pc),d3
  5794.  beq.s .samescale
  5795.  bgt.s .scaledown
  5796.  neg.w d3
  5797.  asr.l d3,d7
  5798.  asr.l d3,d6
  5799.  bra.s .samescale
  5800. .scaledown:
  5801.  asl.l d3,d6
  5802.  asl.l d3,d7
  5803. .samescale
  5804.  move.l d6,sxoff
  5805.  move.l d7,szoff
  5806.  bra pastscale 
  5807.  
  5808.  asr.l #3,d1
  5809.  asr.l #3,d2
  5810.  asr.l #2,d1
  5811.  asr.l #2,d2
  5812.  asr.l #1,d1
  5813.  asr.l #1,d2
  5814. scaleprogfrom
  5815.  nop
  5816.  nop
  5817.  asl.l #1,d1
  5818.  asl.l #1,d2
  5819.  asl.l #2,d1
  5820.  asl.l #2,d2
  5821.  asl.l #3,d1
  5822.  asl.l #3,d2
  5823.  
  5824. top: dc.w 0
  5825. bottom: dc.w 0
  5826. ypos: dc.l 0
  5827. nfloors: dc.w 0
  5828. lighttype: dc.w 0
  5829. above: dc.w 0 
  5830. linedir: dc.w 0
  5831. distaddr: dc.w 0
  5832.  
  5833. minz: dc.w 0
  5834. leftsidetab:
  5835.  ds.w 180
  5836. rightsidetab:
  5837.  ds.w 180
  5838. leftbrighttab:
  5839.  ds.w 180
  5840. rightbrighttab:
  5841.  ds.w 180
  5842.  
  5843. PointBrights:
  5844.  dc.l 0
  5845. CurrentPointBrights:
  5846.  ds.l 1000
  5847.  
  5848. movespd: dc.w 0
  5849. largespd: dc.l 0
  5850. disttobot: dc.w 0
  5851.  
  5852. pastscale:
  5853.  
  5854.  tst.b drawit(pc)
  5855.  beq dontdrawfloor
  5856.  
  5857.  move.l a0,-(a7)
  5858.  
  5859.  move.l #leftsidetab,a4
  5860.  move.w top(pc),d1
  5861.  
  5862.  move.w #39,d7
  5863.  sub.w d1,d7
  5864.  move.w d7,disttobot
  5865.  
  5866.  move.w bottom(pc),d7
  5867.  tst.w above
  5868.  beq.s clipfloor
  5869.  
  5870.  move.w #40,d3
  5871.  move.w d3,d4
  5872.  sub.w topclip,d3
  5873.  sub.w botclip,d4
  5874.  cmp.w d3,d1
  5875.  bge predontdrawfloor
  5876.  cmp.w d4,d7
  5877.  blt predontdrawfloor
  5878.  cmp.w d4,d1
  5879.  bge.s .nocliptoproof
  5880.  move.w d4,d1
  5881. .nocliptoproof
  5882.  cmp.w d3,d7
  5883.  blt doneclip
  5884.  move.w d3,d7
  5885.  bra doneclip
  5886.  
  5887. clipfloor:
  5888.  move.w botclip,d4
  5889.  sub.w #40,d4
  5890.  cmp.w d4,d1
  5891.  bge predontdrawfloor
  5892.  move.w topclip,d3
  5893.  sub.w #40,d3
  5894.  cmp.w d3,d1
  5895.  bge.s .nocliptopfloor
  5896.  move.w d3,d1
  5897. .nocliptopfloor 
  5898.  cmp.w d3,d7
  5899.  ble predontdrawfloor
  5900.  cmp.w d4,d7
  5901.  blt.s .noclipbotfloor
  5902.  move.w d4,d7
  5903. .noclipbotfloor:
  5904.  
  5905. doneclip:
  5906.  
  5907.  lea (a4,d1*2),a4
  5908. ; move.l #dists,a2
  5909.  move.w distaddr,d0
  5910.  muls #64,d0
  5911.  move.l d0,a2
  5912. ; muls #25,d0
  5913. ; adda.w d0,a2
  5914. ; lea (a2,d1*2),a2
  5915.  sub.w d1,d7
  5916.  ble predontdrawfloor 
  5917.  move.w d1,d0
  5918.  bne.s .notzero
  5919.  moveq #1,d0
  5920. .notzero
  5921.  muls linedir,d1
  5922.  add.l d1,a6
  5923.  move.l #floorscalecols,a1
  5924.  move.l LineToUse,a5
  5925.  
  5926.  tst.b gourfloor
  5927.  bne dogourfloor
  5928.  
  5929.  tst.b anyclipping
  5930.  beq dofloornoclip
  5931.  
  5932. dofloor:
  5933. ; move.w (a2)+,d0
  5934.  move.w leftclip(pc),d3
  5935.  move.w rightclip(pc),d4
  5936.  move.w rightsidetab-leftsidetab(a4),d2
  5937.  
  5938.  addq #1,d2
  5939.  cmp.w d3,d2
  5940.  ble.s nodrawline
  5941.  cmp.w d4,d2
  5942.  ble.s noclipright
  5943.  move.w d4,d2
  5944. noclipright:
  5945.  move.w (a4),d1
  5946.  cmp.w d4,d1
  5947.  bge.s nodrawline
  5948.  cmp.w d3,d1
  5949.  bge.s noclipleft
  5950.  move.w d3,d1
  5951. noclipleft:
  5952.  cmp.w d1,d2
  5953.  ble.s nodrawline
  5954.  
  5955.  move.w d1,leftedge
  5956.  move.w d2,rightedge
  5957.  
  5958. ; moveq #0,d1
  5959. ; moveq #0,d3
  5960. ; move.w leftbrighttab-leftsidetab(a4),d1
  5961. ; bge.s .okbl
  5962. ; moveq #0,d1
  5963. ;.okbl:
  5964.  
  5965. ; move.w rightbrighttab-leftsidetab(a4),d3
  5966. ; bge.s .okbr
  5967. ; moveq #0,d3
  5968. ;.okbr:
  5969.  
  5970. ; sub.w d1,d3
  5971. ; asl.w #8,d1
  5972. ; move.l d1,leftbright
  5973. ; swap d3
  5974. ; asr.l #5,d3
  5975. ; divs d5,d3
  5976. ; move.w d3,d5
  5977. ; muls.w d6,d5
  5978. ; asr.l #3,d5
  5979. ; clr.b d5
  5980. ; add.w d5,leftbright+2
  5981.  
  5982. ; ext.l d3
  5983. ; asl.l #5,d3
  5984. ; swap d3
  5985. ; asl.w #8,d3
  5986. ; move.l d3,brightspd
  5987.  
  5988.  move.l a6,a3
  5989.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  5990.  move.l a2,d7
  5991.  divs d0,d7
  5992.  move.w d7,d0
  5993.  jsr (a5)
  5994.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  5995. nodrawline
  5996.  sub.w #1,disttobot
  5997.  adda.w linedir(pc),a6
  5998.  addq #2,a4
  5999.  addq #1,d0
  6000.  subq #1,d7
  6001.  bgt dofloor
  6002.  
  6003. predontdrawfloor
  6004.  move.l (a7)+,a0
  6005.  
  6006. dontdrawfloor:
  6007.  
  6008.  CACHE_FREEZE_OFF d2
  6009.  rts
  6010.  
  6011. anyclipping: dc.w 0
  6012.  
  6013. dofloornoclip:
  6014. ; move.w (a2)+,d0
  6015.  move.w rightsidetab-leftsidetab(a4),d2
  6016.  addq #1,d2
  6017.  move.w (a4)+,d1
  6018.  move.w d1,leftedge
  6019.  move.w d2,rightedge
  6020.  
  6021. ; sub.w d1,d2
  6022.  
  6023. ; moveq #0,d1
  6024. ; moveq #0,d3
  6025. ; move.w leftbrighttab-leftsidetab(a4),d1
  6026. ; bge.s .okbl
  6027. ; moveq #0,d1
  6028. ;.okbl:
  6029.  
  6030. ; move.w rightbrighttab-leftsidetab(a4),d3
  6031. ; bge.s .okbr
  6032. ; moveq #0,d3
  6033. ;.okbr:
  6034.  
  6035. ; sub.w d1,d3
  6036. ; asl.w #8,d1
  6037. ; move.l d1,leftbright
  6038. ; swap d3
  6039. ; asr.l #5,d3
  6040. ; divs d2,d3
  6041. ; ext.l d3
  6042. ; asl.l #5,d3
  6043. ; swap d3
  6044. ; asl.w #8,d3
  6045. ; move.l d3,brightspd
  6046.  
  6047.  move.l a6,a3
  6048.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6049.  move.l a2,d7
  6050.  divs d0,d7
  6051.  move.w d7,d0
  6052.  jsr (a5)
  6053.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6054.  sub.w #1,disttobot
  6055.  adda.w linedir(pc),a6
  6056.  addq #1,d0
  6057.  subq #1,d7
  6058.  bgt dofloornoclip
  6059.  
  6060.  bra predontdrawfloor
  6061.  
  6062. dogourfloor:
  6063.  tst.b anyclipping
  6064.  beq dofloornoclipGOUR
  6065.  
  6066. dofloorGOUR:
  6067. ; move.w (a2)+,d0
  6068.  move.w leftclip(pc),d3
  6069.  move.w rightclip(pc),d4
  6070.  move.w rightsidetab-leftsidetab(a4),d2
  6071.  
  6072.  move.w d2,d5
  6073.  sub.w (a4),d5
  6074.  addq #1,d5
  6075.  moveq #0,d6
  6076.  
  6077.  addq #1,d2
  6078.  cmp.w d3,d2
  6079.  ble nodrawlineGOUR
  6080.  cmp.w d4,d2
  6081.  ble.s nocliprightGOUR
  6082.  move.w d4,d2
  6083. nocliprightGOUR:
  6084.  move.w (a4),d1
  6085.  cmp.w d4,d1
  6086.  bge nodrawlineGOUR
  6087.  cmp.w d3,d1
  6088.  bge.s noclipleftGOUR
  6089.  move.w d3,d6
  6090.  subq #1,d6
  6091.  sub.w d1,d6
  6092.  move.w d3,d1
  6093. noclipleftGOUR:
  6094.  cmp.w d1,d2
  6095.  ble nodrawlineGOUR
  6096.  
  6097.  move.w d1,leftedge
  6098.  move.w d2,rightedge
  6099.  
  6100.  move.l a2,d2
  6101.  divs d0,d2
  6102.  move.w d2,dst
  6103.  asr.w #7,d2
  6104. ; addq #5,d2
  6105. ; add.w lighttype,d2
  6106.  
  6107.  moveq #0,d1
  6108.  moveq #0,d3
  6109.  move.w leftbrighttab-leftsidetab(a4),d1
  6110.  add.w d2,d1
  6111.  bge.s .okbl
  6112.  moveq #0,d1
  6113. .okbl:
  6114.  asr.w #1,d1
  6115.  cmp.w #14,d1
  6116.  ble.s .okdl
  6117.  move.w #14,d1
  6118. .okdl:
  6119.  
  6120.  move.w rightbrighttab-leftsidetab(a4),d3
  6121.  add.w d2,d3
  6122.  bge.s .okbr
  6123.  moveq #0,d3
  6124. .okbr:
  6125.  asr.w #1,d3
  6126.  cmp.w #14,d3
  6127.  ble.s .okdr
  6128.  move.w #14,d3
  6129. .okdr:
  6130.  
  6131.  sub.w d1,d3
  6132.  asl.w #8,d1
  6133.  move.l d1,leftbright
  6134.  swap d3
  6135.  tst.l d3
  6136.  bgt.s .OKITSPOSALREADY 
  6137.  neg.l d3
  6138.  asr.l #5,d3
  6139.  divs d5,d3
  6140.  neg.w d3
  6141.  bra.s .OKNOWITSNEG
  6142.  
  6143. .OKITSPOSALREADY
  6144.  asr.l #5,d3
  6145.  divs d5,d3
  6146. .OKNOWITSNEG
  6147.  muls d3,d6
  6148.  add.w #256*8,d6
  6149.  asr.w #3,d6
  6150.  clr.b d6
  6151.  add.w d6,leftbright+2
  6152.  
  6153.  ext.l d3
  6154.  asl.l #5,d3
  6155.  swap d3
  6156.  asl.w #8,d3
  6157.  move.l d3,brightspd
  6158.  
  6159.  move.l a6,a3
  6160.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6161.  move.w dst,d0
  6162.  lea floorscalecols,a1
  6163.  move.l floortile,a0
  6164.  adda.w whichtile,a0
  6165.  jsr pastfloorbright
  6166.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6167. nodrawlineGOUR
  6168.  
  6169.  sub.w #1,disttobot
  6170.  
  6171.  adda.w linedir(pc),a6
  6172.  addq #2,a4
  6173.  addq #1,d0
  6174.  subq #1,d7
  6175.  bgt dofloorGOUR
  6176.  
  6177. predontdrawfloorGOUR
  6178.  move.l (a7)+,a0
  6179.  
  6180. dontdrawfloorGOUR:
  6181.  
  6182.  CACHE_FREEZE_OFF d2
  6183.  rts
  6184.  
  6185. dofloornoclipGOUR:
  6186. ; move.w (a2)+,d0
  6187.  move.w rightsidetab-leftsidetab(a4),d2
  6188.  addq #1,d2
  6189.  move.w (a4),d1
  6190.  move.w d1,leftedge
  6191.  move.w d2,rightedge
  6192.  
  6193.  sub.w d1,d2
  6194.  
  6195.  move.l a2,d6
  6196.  divs d0,d6
  6197.  move.w d6,d5
  6198.  asr.w #7,d5
  6199. ; addq #5,d5
  6200. ; add.w lighttype,d5
  6201.  
  6202.  moveq #0,d1
  6203.  moveq #0,d3
  6204.  move.w leftbrighttab-leftsidetab(a4),d1
  6205.  add.w d5,d1
  6206.  bge.s .okbl
  6207.  moveq #0,d1
  6208. .okbl:
  6209.  asr.w #1,d1
  6210.  cmp.w #14,d1
  6211.  ble.s .okdl
  6212.  move.w #14,d1
  6213. .okdl:
  6214.  
  6215.  move.w rightbrighttab-leftsidetab(a4),d3
  6216.  add.w d5,d3
  6217.  bge.s .okbr
  6218.  moveq #0,d3
  6219. .okbr:
  6220.  asr.w #1,d3
  6221.  cmp.w #14,d3
  6222.  ble.s .okdr
  6223.  move.w #14,d3
  6224. .okdr:
  6225.  
  6226.  sub.w d1,d3
  6227.  asl.w #8,d1
  6228.  move.l d1,leftbright
  6229.  swap d3
  6230.  asr.l #5,d3
  6231.  divs d2,d3
  6232.  ext.l d3
  6233.  asl.l #5,d3
  6234.  swap d3
  6235.  asl.w #8,d3
  6236.  move.l d3,brightspd
  6237.  
  6238.  
  6239.  move.l a6,a3
  6240.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6241.  move.w d6,d0
  6242.  move.w d0,dst
  6243.  lea floorscalecols,a1
  6244.  move.l floortile,a0
  6245.  adda.w whichtile,a0
  6246.  jsr pastfloorbright
  6247.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6248.  sub.w #1,disttobot
  6249.  adda.w linedir(pc),a6
  6250.  addq #2,a4
  6251.  addq #1,d0
  6252.  subq #1,d7
  6253.  bgt dofloornoclipGOUR
  6254.  
  6255.  bra predontdrawfloorGOUR
  6256.  
  6257.  
  6258.  
  6259. dists:
  6260. ; incbin "floordists"
  6261. drawit: dc.w 0
  6262.  
  6263. LineToUse: dc.l 0
  6264.  
  6265. ***************************
  6266. * Right then, time for the floor
  6267. * routine...
  6268. * For test purposes, give it
  6269. * a3 = point to screen
  6270. * d0= z distance away
  6271. * and sinval+cosval must be set up.
  6272. ***************************
  6273.  
  6274. BLACKFLOOR:
  6275.  moveq #0,d0
  6276.  bra.s DOBLACK
  6277.  
  6278. SimpleFloorLine:
  6279.  
  6280.  CACHE_OFF d2
  6281.  
  6282.  move.l #doacrossline,a1
  6283.  move.w leftedge(pc),d1
  6284.  move.w rightedge(pc),d3
  6285.  sub.w d1,d3
  6286.  lea (a1,d1.w*4),a1
  6287.  move.w (a1,d3.w*4),d4
  6288.  move.w #$4e75,(a1,d3.w*4)
  6289.  
  6290.  tst.b CLRNOFLOOR
  6291.  bne.s BLACKFLOOR
  6292.  
  6293.  move.l #PLAINSCALE,a2
  6294.  
  6295.  move.w d0,d2
  6296.  move.w lighttype,d1
  6297.  asr.w #8,d2
  6298.  add.w #5,d1
  6299.  add.w d2,d1
  6300.  bge.s .fixedbright
  6301.  moveq #0,d1
  6302. .fixedbright:
  6303.  cmp.w #28,d1
  6304.  ble.s .smallbright
  6305.  move.w #28,d1
  6306. .smallbright:
  6307.  lea (a2,d1.w*2),a2
  6308.  
  6309.  move.w whichtile,d0
  6310.  move.w d0,d1
  6311.  and.w #$3,d1
  6312.  and.w #$300,d0
  6313.  lsl.b #6,d1
  6314.  move.b d1,d0
  6315.  move.w d0,tstwhich
  6316.  move.w (a2,d0.w),d0
  6317.  
  6318. DOBLACK:
  6319.  jsr (a1)
  6320.  move.w d4,(a1,d3.w*4)
  6321.  
  6322.  CACHE_ON d2
  6323.  
  6324.  rts
  6325.  
  6326. tstwhich: dc.w 0
  6327. whichtile: dc.w 0
  6328.   
  6329. PLAINSCALE: incbin "ab3:includes/plainscale"
  6330.   
  6331. storeit: dc.l 0
  6332.  
  6333. doacrossline:
  6334. val SET 0
  6335.  REPT 32
  6336.  move.w d0,val(a3)
  6337. val SET val+4
  6338.  ENDR
  6339. val SET val+4
  6340.  REPT 32
  6341.  move.w d0,val(a3)
  6342. val SET val+4
  6343.  ENDR
  6344. val SET val+4
  6345.  REPT 32
  6346.  move.w d0,val(a3)
  6347. val SET val+4
  6348.  ENDR
  6349.  rts
  6350.  
  6351.  
  6352. leftedge: dc.w 0
  6353. rightedge: dc.w 0
  6354.  
  6355. rndpt: dc.l rndtab
  6356.  
  6357.  
  6358. dst: dc.w 0
  6359.  
  6360. FloorLine:
  6361.  
  6362.  move.l floortile,a0
  6363.  adda.w whichtile,a0
  6364.  move.w lighttype,d1
  6365.  move.w d0,dst
  6366.  move.w d0,d2
  6367. *********************
  6368. * Old version
  6369.  asr.w #8,d2
  6370.  add.w #5,d1
  6371. *********************
  6372. ; asr.w #3,d2
  6373. ; sub.w #4,d2
  6374. ; cmp.w #6,d2
  6375. ; blt.s flbrbr
  6376. ; move.w #6,d2
  6377. ;flbrbr:
  6378. *********************
  6379.  add.w d2,d1
  6380.  bge.s .fixedbright
  6381.  moveq #0,d1
  6382. .fixedbright:
  6383.  cmp.w #28,d1
  6384.  ble.s .smallbright
  6385.  move.w #28,d1
  6386. .smallbright:
  6387.  lea floorscalecols,a1
  6388.  add.l floorbright(pc,d1.w*4),a1
  6389.  bra pastfloorbright
  6390.  
  6391. ConstCol: dc.w 0
  6392.  
  6393. BumpLine:
  6394.  
  6395.  tst.b smoothbumps
  6396.  beq.s Chunky
  6397.  
  6398.  move.l #SmoothTile,a0
  6399.  lea Smoothscalecols,a1
  6400.  bra pastast
  6401.  
  6402. Chunky:
  6403.  
  6404.  moveq #0,d2
  6405.  move.l #Bumptile,a0
  6406.  move.w whichtile,d2
  6407.  adda.w d2,a0
  6408.  ror.l #2,d2
  6409.  lsr.w #6,d2
  6410.  rol.l #2,d2
  6411.  and.w #15,d2
  6412.  move.l #ConstCols,a1
  6413.  move.w (a1,d2.w*2),ConstCol
  6414.  lea Bumpscalecols,a1
  6415.  
  6416. pastast:
  6417.  move.w lighttype,d1
  6418.  
  6419.  move.w d0,dst
  6420.  
  6421.  move.w d0,d2
  6422. *********************
  6423. * Old version
  6424.  asr.w #8,d2
  6425.  add.w #5,d1
  6426. *********************
  6427. ; asr.w #3,d2
  6428. ; sub.w #4,d2
  6429. ; cmp.w #6,d2
  6430. ; blt.s flbrbr
  6431. ; move.w #6,d2
  6432. ;flbrbr:
  6433. *********************
  6434.  add.w d2,d1
  6435.  bge.s .fixedbright
  6436.  moveq #0,d1
  6437. .fixedbright:
  6438.  cmp.w #28,d1
  6439.  ble.s .smallbright
  6440.  move.w #28,d1
  6441. .smallbright:
  6442.  add.l floorbright(pc,d1.w*4),a1
  6443.  bra pastfloorbright
  6444.  
  6445.  
  6446. floorbright:
  6447.  dc.l 512*0
  6448.  dc.l 512*1
  6449.  dc.l 512*1
  6450.  dc.l 512*2
  6451.  dc.l 512*2
  6452.  
  6453.  dc.l 512*3
  6454.  dc.l 512*3
  6455.  dc.l 512*4
  6456.  dc.l 512*4
  6457.  dc.l 512*5
  6458.  
  6459.  dc.l 512*5
  6460.  dc.l 512*6
  6461.  dc.l 512*6
  6462.  dc.l 512*7
  6463.  dc.l 512*7
  6464.  
  6465.  dc.l 512*8
  6466.  dc.l 512*8
  6467.  dc.l 512*9
  6468.  dc.l 512*9
  6469.  dc.l 512*10
  6470.  
  6471.  dc.l 512*10
  6472.  dc.l 512*11
  6473.  dc.l 512*11
  6474.  dc.l 512*12
  6475.  dc.l 512*12
  6476.  
  6477.  dc.l 512*13
  6478.  dc.l 512*13
  6479.  dc.l 512*14
  6480.  dc.l 512*14
  6481.  
  6482. widthleft: dc.w 0
  6483. scaleval: dc.w 0
  6484. sxoff: dc.l 0
  6485. szoff: dc.l 0
  6486. xoff34: dc.w 0
  6487. zoff34: dc.w 0
  6488. scosval: dc.w 0
  6489. ssinval: dc.w 0
  6490.  
  6491.  
  6492. floorsetbright:
  6493.  move.l #walltiles,a0
  6494.  
  6495. pastfloorbright
  6496.  
  6497.  move.w d0,d1
  6498.  muls cosval,d1    ; change in x across whole width
  6499.  move.w d0,d2
  6500.  muls sinval,d2    ; change in z across whole width
  6501.  neg.l d2
  6502. scaleprog:
  6503.  move.w scaleval(pc),d3
  6504.  beq.s .samescale
  6505.  bgt.s .scaledown
  6506.  neg.w d3
  6507.  asr.l d3,d1
  6508.  asr.l d3,d2
  6509.  bra.s .samescale
  6510. .scaledown:
  6511.  asl.l d3,d1
  6512.  asl.l d3,d2
  6513. .samescale
  6514.  
  6515.  move.l d1,d3 ;    z cos
  6516.  move.l d3,d6
  6517.  move.l d3,d5
  6518.  asr.l #1,d6
  6519.  add.l d6,d3
  6520.  asr.l #1,d3
  6521.  
  6522.  move.l d2,d4    ; z sin
  6523.  move.l d4,d6
  6524.  asr.l #1,d6
  6525.  add.l d4,d6
  6526.  add.l d3,d4
  6527.  neg.l d4    ; start x
  6528.  
  6529.  asr.l #1,d6    ; zsin/2
  6530.  sub.l d6,d5    ; start z
  6531.  
  6532.  add.l sxoff,d4
  6533.  add.l szoff,d5
  6534.  
  6535.  moveq #0,d6
  6536.  move.w leftedge(pc),d6
  6537.  beq.s nomultleft
  6538.  
  6539.  move.l d1,a4
  6540.  move.l d2,a5
  6541.  
  6542.  muls.l d6,d3:d1
  6543.  asr.l #6,d1
  6544.  add.l d1,d4
  6545.  
  6546.  muls.l d6,d3:d2
  6547.  asr.l #6,d2
  6548.  add.l d2,d5
  6549.  move.l a4,d1
  6550.  move.l a5,d2
  6551.  
  6552. nomultleft:
  6553.  
  6554.  move.w d4,startsmoothx
  6555.  move.w d5,startsmoothz
  6556.  
  6557.  swap d4
  6558.  asr.l #8,d5
  6559. ; add.w szoff,d5
  6560. ; add.w sxoff,d4
  6561.  and.w #63,d4
  6562.  and.w #63*256,d5
  6563.  move.b d4,d5
  6564.  
  6565.  asr.l #6,d1
  6566.  asr.l #6,d2
  6567.  move.w d1,a4
  6568.  move.w d2,a5
  6569.  asr.l #8,d2
  6570.  and.w #%0011111100000000,d2
  6571.  swap d1
  6572.  add.w d1,d2
  6573.  move.w #%11111100111111,d1
  6574.  and.w d1,d5
  6575.  swap d5
  6576.  move.w startsmoothz,d5
  6577.  swap d5
  6578.  swap d2
  6579.  move.w a5,d2
  6580.  swap d2
  6581.  
  6582. ***********************************
  6583.  
  6584.  move.w d6,a2
  6585.  move.l d2,d6
  6586.  add.w #256,d6
  6587.  
  6588.  moveq #0,d0
  6589.  
  6590.  tst.w a2
  6591.  beq startatleftedge
  6592.  
  6593.  move.w widthleft(pc),d4
  6594.  
  6595.  move.w rightedge(pc),d3
  6596.  
  6597.  cmp.w #31,a2
  6598.  bgt.s notinfirststrip
  6599.  lea (a3,a2.w*4),a3
  6600.  cmp.w #32,d3
  6601.  ble.s allinfirststrip
  6602.  move.w #32,d7
  6603.  sub.w d7,d3
  6604.  sub.w a2,d7
  6605.  bra intofirststrip
  6606.  
  6607. allinfirststrip
  6608.  sub.w a2,d3
  6609.  move.w d3,d7
  6610.  move.w #0,d4
  6611.  bra allintofirst
  6612.  
  6613. notinfirststrip:
  6614.  sub.w #32,a2
  6615.  sub.w #32,d3
  6616.  adda.w #33*4,a3
  6617.  cmp.w #31,a2
  6618.  bgt.s notstartinsec
  6619.  lea (a3,a2.w*4),a3
  6620.  cmp.w #32,d3
  6621.  ble.s allinsecstrip
  6622.  move.w #32,d7
  6623.  sub.w d7,d3
  6624.  sub.w a2,d7
  6625.  move.w d3,d4
  6626.  bra allintofirst
  6627.  
  6628. allinsecstrip
  6629.  sub.w a2,d3
  6630.  move.w d3,d7
  6631.  move.w #0,d4
  6632.  bra allintofirst
  6633.  rts
  6634.  
  6635. prot8: dc.w 0
  6636.  
  6637. notstartinsec:
  6638.  sub.w #32,a2
  6639.  sub.w #32,d3
  6640.  adda.w #33*4,a3
  6641.  lea (a3,a2.w*4),a3
  6642.  cmp.w #32,d3
  6643.  ble.s allinthirdstrip
  6644.  move.w #32,d7
  6645.  sub.w d7,d3
  6646.  sub.w a2,d7
  6647.  move.w d3,d4
  6648.  bra allintofirst
  6649.  rts
  6650.  
  6651. allinthirdstrip
  6652.  sub.w a2,d3
  6653.  move.w d3,d7
  6654.  move.w #0,d4
  6655.  bra allintofirst
  6656.  rts
  6657.  
  6658. startatleftedge:
  6659.  
  6660.  move.w rightedge(pc),d3
  6661.  sub.w a2,d3
  6662.  
  6663.  move.w d3,d7
  6664.  cmp.w #32,d7
  6665.  ble.s .notoowide
  6666.  move.w #32,d7
  6667. .notoowide:
  6668.  sub.w d7,d3
  6669. intofirststrip:
  6670.  
  6671.  move.w d3,d4
  6672. allintofirst:
  6673.  
  6674.  move.w startsmoothx,d3
  6675.  
  6676. tstwat:
  6677.  
  6678.  tst.b gourfloor
  6679.  bne gouraudfloor
  6680.  
  6681.  tst.b usewater
  6682.  bne texturedwater
  6683.  
  6684.  
  6685. ******************************
  6686. * BumpMap the floor/ceiling! *
  6687.  tst.b usebumps
  6688.  bne.s BumpMap
  6689. ******************************
  6690.  
  6691. ordinary:
  6692.  moveq #0,d0
  6693.  
  6694.  dbra d7,acrossscrn
  6695.  rts
  6696.  
  6697. usebumps: dc.w $0
  6698. smoothbumps: dc.w $0
  6699. gourfloor: dc.w 0
  6700.  
  6701.  include "ab3:source/bumpmap.s"
  6702.  
  6703.  CNOP 0,4
  6704. backbefore:
  6705.  and.w d1,d5
  6706.  move.b (a0,d5.w*4),d0
  6707.  add.w a4,d3
  6708.  move.w (a1,d0.w*2),(a3)
  6709.  addq #4,a3
  6710.  addx.l d6,d5
  6711.  dbcs d7,acrossscrn
  6712.  dbcc d7,backbefore
  6713.  bra.s past1
  6714.  
  6715. acrossscrn:
  6716.  and.w d1,d5
  6717.  move.b (a0,d5.w*4),d0
  6718.  add.w a4,d3
  6719.  move.w (a1,d0.w*2),(a3)
  6720.  addq #4,a3
  6721.  addx.l d2,d5
  6722.  dbcs d7,acrossscrn
  6723.  dbcc d7,backbefore
  6724. past1:
  6725.  bcc.s gotoacross
  6726.  
  6727.  move.w d4,d7
  6728.  bne.s .notdoneyet
  6729.  CACHE_FREEZE_ON d2
  6730.  rts
  6731. .notdoneyet:
  6732.  
  6733.  cmp.w #32,d7
  6734.  ble.s .notoowide
  6735.  move.w #32,d7
  6736. .notoowide
  6737.  sub.w d7,d4  
  6738.  addq #4,a3
  6739.  
  6740.  dbra d7,backbefore
  6741.  CACHE_FREEZE_ON d2
  6742.  rts
  6743.  
  6744.  
  6745. gotoacross:
  6746.  
  6747.  move.w d4,d7
  6748.  bne.s .notdoneyet
  6749.  CACHE_FREEZE_ON d2
  6750.  rts
  6751. .notdoneyet:
  6752.  
  6753.  cmp.w #32,d7
  6754.  ble.s .notoowide
  6755.  move.w #32,d7
  6756. .notoowide
  6757.  sub.w d7,d4  
  6758.  addq #4,a3
  6759.  
  6760.  dbra d7,acrossscrn
  6761.  CACHE_FREEZE_ON d2
  6762.  rts
  6763.  
  6764. leftbright: dc.l 0
  6765. brightspd: dc.l 0
  6766.  
  6767. gouraudfloor:
  6768.  move.l leftbright,d0
  6769.  move.l brightspd,d1
  6770.  dbra d7,acrossscrngour
  6771.  rts
  6772.  
  6773.  CNOP 0,4
  6774. backbeforegour:
  6775.  and.w #63*256+63,d5
  6776.  move.b (a0,d5.w*4),d0
  6777.  add.l d1,d0
  6778.  bcc.s .nomoreb
  6779.  add.w #256,d0
  6780. .nomoreb:
  6781.  add.w a4,d3
  6782.  move.w (a1,d0.w*2),(a3)
  6783.  addq #4,a3 
  6784.  addx.l d6,d5
  6785.  dbcs d7,acrossscrngour
  6786.  dbcc d7,backbeforegour
  6787.  bra.s past1gour
  6788.  
  6789. acrossscrngour:
  6790.  and.w #63*256+63,d5
  6791.  move.b (a0,d5.w*4),d0
  6792.  add.l d1,d0
  6793.  bcc.s .nomoreb
  6794.  add.w #256,d0
  6795. .nomoreb:
  6796.  add.w a4,d3
  6797.  move.w (a1,d0.w*2),(a3)
  6798.  addq #4,a3
  6799.  addx.l d2,d5
  6800.  dbcs d7,acrossscrngour
  6801.  dbcc d7,backbeforegour
  6802. past1gour:
  6803.  bcc.s gotoacrossgour
  6804.  
  6805.  move.w d4,d7
  6806.  bne.s .notdoneyet
  6807.  move.l d0,leftbright
  6808.  
  6809.  CACHE_FREEZE_ON d2
  6810.  rts
  6811. .notdoneyet:
  6812.  
  6813.  cmp.w #32,d7
  6814.  ble.s .notoowide
  6815.  move.w #32,d7
  6816. .notoowide
  6817.  sub.w d7,d4  
  6818.  addq #4,a3
  6819.  
  6820.  dbra d7,backbeforegour
  6821.  CACHE_FREEZE_ON d2
  6822.  rts
  6823.  
  6824.  
  6825. gotoacrossgour:
  6826.  
  6827.  move.w d4,d7
  6828.  bne.s .notdoneyet
  6829.  CACHE_FREEZE_ON d2
  6830.  rts
  6831. .notdoneyet:
  6832.  
  6833.  cmp.w #32,d7
  6834.  ble.s .notoowide
  6835.  move.w #32,d7
  6836. .notoowide
  6837.  sub.w d7,d4  
  6838.  addq #4,a3
  6839.  
  6840.  dbra d7,acrossscrngour
  6841.  CACHE_FREEZE_ON d2
  6842.  rts
  6843.  
  6844.  
  6845. waterpt: dc.l waterlist
  6846.  
  6847. waterlist:
  6848.  dc.l waterfile
  6849.  dc.l waterfile+2
  6850.  dc.l waterfile+256
  6851.  dc.l waterfile+256+2
  6852.  dc.l waterfile+512
  6853.  dc.l waterfile+512+2
  6854.  dc.l waterfile+768
  6855.  dc.l waterfile+768+2
  6856. ; dc.l waterfile+768
  6857. ; dc.l waterfile+512+2
  6858. ; dc.l waterfile+512
  6859. ; dc.l waterfile+256+2
  6860. ; dc.l waterfile+256
  6861. ; dc.l waterfile+2
  6862. endwaterlist:
  6863.  
  6864. watertouse: dc.l waterfile
  6865.  
  6866. wtan: dc.w 0
  6867. wateroff: dc.w 0
  6868.  
  6869. texturedwater:
  6870.  
  6871.  add.w wateroff,d5
  6872.  
  6873.  move.l #brightentab,a1
  6874.  move.w dst,d0
  6875.  clr.b d0
  6876.  
  6877.  add.w d0,d0
  6878.  cmp.w #12*512,d0
  6879.  blt.s .notoowater
  6880.  move.w #12*512,d0
  6881.  
  6882.  
  6883. .notoowater:
  6884.   
  6885.  adda.w d0,a1
  6886.  
  6887.  move.w dst,d0
  6888.  asl.w #7,d0
  6889.  add.w wtan,d0
  6890.  and.w #8191,d0
  6891.  move.l #SineTable,a0
  6892.  move.w (a0,d0.w),d0
  6893.  ext.l d0
  6894.  
  6895.  move.w dst,d3
  6896.  add.w #300,d3
  6897.  divs d3,d0
  6898.  asr.w #6,d0
  6899.  addq #2,d0
  6900.  cmp.w disttobot,d0
  6901.  blt.s oknotoffbototot
  6902.  
  6903.  move.w disttobot,d0
  6904.  subq #1,d0
  6905.  
  6906. oknotoffbototot
  6907.  
  6908. ; move.w dst,d3
  6909. ; asr.w #7,d3
  6910. ; add.w d3,d0
  6911.  
  6912.  muls #104*4,d0
  6913.  tst.w above
  6914.  beq.s nonnnnneg
  6915.  neg.l d0
  6916.  
  6917. nonnnnneg:
  6918.  
  6919.  move.l d0,a6
  6920.  
  6921.  move.l watertouse,a0
  6922.  
  6923.  move.w startsmoothx,d3
  6924.  dbra d7,acrossscrnw
  6925.  rts
  6926.  
  6927. backbeforew:
  6928.  and.w d1,d5
  6929.  move.w (a0,d5.w*4),d0
  6930.  move.b 1(a3,a6.w),d0
  6931.  move.w (a1,d0.w*2),(a3)
  6932.  addq #4,a3
  6933.  add.w a4,d3
  6934.  addx.l d6,d5
  6935.  dbcs d7,acrossscrnw
  6936.  dbcc d7,backbeforew
  6937.  bcc.s past1w
  6938.  add.w #256,d5 
  6939.  bra.s past1w
  6940.  
  6941. acrossscrnw:
  6942.  and.w d1,d5
  6943.  move.w (a0,d5.w*4),d0
  6944.  move.b 1(a3,a6.w),d0
  6945.  move.w (a1,d0.w*2),(a3)
  6946.  addq #4,a3
  6947.  add.w a4,d3
  6948.  addx.l d2,d5
  6949.  dbcs d7,acrossscrnw
  6950.  dbcc d7,backbeforew
  6951.  bcc.s past1w
  6952.  add.w #256,d5 
  6953. past1w:
  6954.  
  6955.  move.w d4,d7
  6956.  bne.s .notdoneyet
  6957.  rts
  6958. .notdoneyet:
  6959.  
  6960.  cmp.w #32,d7
  6961.  ble.s .notoowide
  6962.  move.w #32,d7
  6963. .notoowide
  6964.  sub.w d7,d4  
  6965.  addq #4,a3
  6966.  
  6967.  dbra d7,acrossscrnw
  6968.  CACHE_FREEZE_ON d2
  6969.  rts
  6970.  
  6971. usewater: dc.w 0
  6972.  dc.w 0
  6973. startsmoothx: dc.w 0
  6974.  dc.w 0
  6975. startsmoothz: dc.w 0
  6976.  
  6977. ********************************
  6978. *
  6979.  include "AB3:source/ObjDraw3.chipram"
  6980. *
  6981. ********************************
  6982.  
  6983. numframes:
  6984.  dc.w 0
  6985.  
  6986. alframe: dc.l 0
  6987.  
  6988. alan:
  6989.  dcb.l 8,0
  6990.  dcb.l 8,1
  6991.  dcb.l 8,2
  6992.  dcb.l 8,3
  6993. endalan:
  6994.  
  6995. alanptr: dc.l alan
  6996.  
  6997. Time2: dc.l 0
  6998. dispco:
  6999.  dc.w 0
  7000.  
  7001. KInt_Init    ;VBR Assumed $0
  7002.         move.l $68.w,OLDKINT
  7003.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  7004.         And.b    #$3f,$bfe201        Set Timers
  7005.         Move.b    #$7f,$bfed01
  7006.         Move.b    $bfed01,d0
  7007.         Move.b    #$88,$bfed01
  7008.         St.b    KInt_CCode        
  7009.         Move.b    #$a0,$bfee01        Start Timey Thing
  7010.         Rts                And return
  7011.  
  7012. OLDKINT: dc.l 0
  7013.  
  7014.  
  7015. KInt_Main    
  7016.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  7017.         Move.w    #8,$dff09a        Temp Disable Int.
  7018.         Move.w    $dff01e,d0        Intreqr
  7019.         And.w    #8,d0            Mask Out All X^ K_Int
  7020.     Beq    KInt_End            Not Keyboard Interrupt
  7021.         Lea    $bfed01,a6
  7022.         Move.w    #$8,$dff09c        Clear Int.Request
  7023.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  7024.         Ror.b    #1,d0            Roll to correct
  7025.         Not.b    d0            
  7026.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  7027. .HandShake    Move.b    #8,(a6)
  7028.         Move.b    #7,-$900(a6)
  7029.         Move.b    #0,-$800(a6)
  7030.         Move.b    #0,-$100(a6)
  7031.         Move.b    #$d1,$100(a6)        
  7032.         Tst.b    (a6)    
  7033. .wait        Btst    #0,(a6)
  7034.     Beq.s    .wait
  7035.         Move.b    #$a0,$100(a6)        
  7036.         Move.b    (a6),d0        
  7037.         Move.b    #$88,(a6)
  7038.         Lea    KeyMap,a1
  7039.         Moveq.w    #0,d0
  7040.         Move.b    KInt_CCode(pc),d0
  7041.     Bmi.s    KInt_KeyUp            neg if up 
  7042.  
  7043. KInt_KeyDown
  7044.         st (a1,d0.w)
  7045.         move.b d0,lastpressed
  7046.     Bra    KInt_End
  7047.  
  7048. KInt_KeyUp
  7049.         And.w    #$7f,d0            Make code Positive
  7050.         clr.b (a1,d0.w)
  7051. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  7052.     
  7053.         Move.w    #$8008,$dff09a        Re-enable Int.
  7054.         Rte
  7055.  
  7056. lastpressed:    dc.b 0
  7057. KInt_CCode    Ds.b    1
  7058. KInt_Askey    Ds.b    1
  7059. KInt_OCode    Ds.w    1
  7060.  
  7061.  
  7062. OldSpace: dc.b 0
  7063. SpaceTapped: dc.b 0
  7064. PLR1_SPCTAP: dc.b 0
  7065. PLR2_SPCTAP: dc.b 0
  7066. PLR1_Ducked: dc.b 0
  7067. PLR2_Ducked: dc.b 0
  7068.  even
  7069.  
  7070.  include "ab3:source/PLR1CONTROL.s"
  7071.  include "ab3:source/PLR2CONTROL.s"
  7072.  include "ab3:source/FALL.s"
  7073.  
  7074. prot7: dc.w 0
  7075.  
  7076. GOTTOSEND: dc.w 0
  7077.  
  7078. OtherInter:
  7079.  move.w #$0010,$dff000+intreq
  7080.  movem.l d0-d7/a0-a6,-(a7)
  7081.  bra.s justshake
  7082.  
  7083. Chan0inter:
  7084.  
  7085.  move.w #$0010,$dff000+intreq
  7086.  
  7087.  tst.b doanything
  7088.  bne.s dosomething
  7089.  rte
  7090.  
  7091. dosomething:
  7092.  
  7093.  
  7094.  addq.w #1,FramesToDraw
  7095.  movem.l d0-d7/a0-a6,-(a7)
  7096.  
  7097. ; jsr INITREC
  7098. ; jsr RECEIVE
  7099.  
  7100. ; tst.l BUFFER
  7101. ; beq.s justshake
  7102. ; st GOTTOSEND
  7103. ; move.l #OtherInter,$6c
  7104.  
  7105. justshake:
  7106.  
  7107.  cmp.b #'b',Prefsfile+3
  7108.  bne.s .noback
  7109.  jsr mt_music
  7110. .noback:
  7111.  
  7112.  bra dontshowtime
  7113.  
  7114.  tst.b oktodisplay
  7115.  beq dontshowtime
  7116.  clr.b oktodisplay
  7117.  subq.w #1,dispco
  7118.  bgt dontshowtime
  7119.  move.w #10,dispco
  7120.  
  7121.  move.l #TimerScr+10,a0
  7122.  move.l TimeCount,d0
  7123.  bge.s timenotneg
  7124.  move.l #1111*256,d0
  7125. timenotneg:
  7126.  asr.l #8,d0
  7127.  move.l #digits,a1
  7128.  move.w #7,d2
  7129. digitlop
  7130.  divs #10,d0
  7131.  swap d0
  7132.  lea (a1,d0.w*8),a2
  7133.  move.b (a2)+,(a0)
  7134.  move.b (a2)+,24(a0)
  7135.  move.b (a2)+,24*2(a0)
  7136.  move.b (a2)+,24*3(a0)
  7137.  move.b (a2)+,24*4(a0)
  7138.  move.b (a2)+,24*5(a0)
  7139.  move.b (a2)+,24*6(a0)
  7140.  move.b (a2)+,24*7(a0)
  7141.  subq #1,a0
  7142.  swap d0
  7143.  ext.l d0
  7144.  dbra d2,digitlop
  7145.  
  7146.  move.l #TimerScr+10+24*10,a0
  7147.  move.l NumTimes,d0
  7148.  move.l #digits,a1
  7149.  move.w #3,d2
  7150. digitlop2
  7151.  divs #10,d0
  7152.  swap d0
  7153.  lea (a1,d0.w*8),a2
  7154.  move.b (a2)+,(a0)
  7155.  move.b (a2)+,24(a0)
  7156.  move.b (a2)+,24*2(a0)
  7157.  move.b (a2)+,24*3(a0)
  7158.  move.b (a2)+,24*4(a0)
  7159.  move.b (a2)+,24*5(a0)
  7160.  move.b (a2)+,24*6(a0)
  7161.  move.b (a2)+,24*7(a0)
  7162.  subq #1,a0
  7163.  swap d0
  7164.  ext.l d0
  7165.  dbra d2,digitlop2
  7166.  
  7167.  move.l #TimerScr+10+24*20,a0
  7168.  moveq #0,d0
  7169.  move.w FramesToDraw,d0
  7170.  move.l #digits,a1
  7171.  move.w #2,d2
  7172. digitlop3
  7173.  divs #10,d0
  7174.  swap d0
  7175.  lea (a1,d0.w*8),a2
  7176.  move.b (a2)+,(a0)
  7177.  move.b (a2)+,24(a0)
  7178.  move.b (a2)+,24*2(a0)
  7179.  move.b (a2)+,24*3(a0)
  7180.  move.b (a2)+,24*4(a0)
  7181.  move.b (a2)+,24*5(a0)
  7182.  move.b (a2)+,24*6(a0)
  7183.  move.b (a2)+,24*7(a0)
  7184.  subq #1,a0
  7185.  swap d0
  7186.  ext.l d0
  7187.  dbra d2,digitlop3
  7188.  
  7189. dontshowtime:
  7190.  
  7191.  
  7192.  move.l alanptr,a0
  7193.  move.l (a0)+,alframe
  7194.  cmp.l #endalan,a0
  7195.  blt.s nostartalan
  7196.  move.l #alan,a0
  7197. nostartalan:
  7198.  move.l a0,alanptr
  7199.  
  7200.  
  7201.  tst.b READCONTROLS
  7202.  beq.s nocontrols
  7203.  
  7204.  cmp.b #'s',mors
  7205.  beq.s control2
  7206.  
  7207.  tst.b PLR1MOUSE
  7208.  beq.s PLR1_nomouse
  7209.  bsr PLR1_mouse_control
  7210. PLR1_nomouse:
  7211.  tst.b PLR1KEYS
  7212.  beq.s PLR1_nokeys
  7213.  bsr PLR1_keyboard_control
  7214. PLR1_nokeys:
  7215. ; tst.b PLR1PATH
  7216. ; beq.s PLR1_nopath
  7217. ; bsr PLR1_follow_path
  7218. ;PLR1_nopath:
  7219.  tst.b PLR1JOY
  7220.  beq.s PLR1_nojoy
  7221.  bsr PLR1_JoyStick_control
  7222. PLR1_nojoy: 
  7223.  bra.s nocontrols
  7224.  
  7225. control2:
  7226.  tst.b PLR2MOUSE
  7227.  beq.s PLR2_nomouse
  7228.  bsr PLR2_mouse_control
  7229. PLR2_nomouse:
  7230.  tst.b PLR2KEYS
  7231.  beq.s PLR2_nokeys
  7232.  bsr PLR2_keyboard_control
  7233. PLR2_nokeys:
  7234. ; tst.b PLR2PATH
  7235. ; beq.s PLR2_nopath
  7236. ; bsr PLR1_follow_path
  7237. ;PLR2_nopath:
  7238.  tst.b PLR2JOY
  7239.  beq.s PLR2_nojoy
  7240.  bsr PLR2_JoyStick_control
  7241. PLR2_nojoy: 
  7242.  
  7243.  
  7244. nocontrols:
  7245.  
  7246.  move.l #$dff000,a6
  7247.  
  7248.  cmp.b #'4',Prefsfile+1
  7249.  bne.s nomuckabout
  7250.  
  7251.  move.w #$0,d0 
  7252.  tst.b NoiseMade0LEFT
  7253.  beq.s noturnoff0
  7254.  move.w #1,d0
  7255. noturnoff0:
  7256.  tst.b NoiseMade0RIGHT
  7257.  beq.s noturnoff1
  7258.  or.w #2,d0
  7259. noturnoff1:
  7260.  tst.b NoiseMade1RIGHT
  7261.  beq.s noturnoff2
  7262.  or.w #4,d0
  7263. noturnoff2:
  7264.  tst.b NoiseMade1LEFT
  7265.  beq.s noturnoff3
  7266.  or.w #8,d0
  7267. noturnoff3:
  7268.  move.w d0,dmacon(a6)
  7269.  
  7270. nomuckabout:
  7271.  
  7272.  
  7273. ; tst.b PLR2_fire
  7274. ; beq.s firenotpressed2
  7275. ; fire was pressed last time.
  7276. ; btst #7,$bfe001
  7277. ; bne.s firenownotpressed2
  7278. ; fire is still pressed this time.
  7279. ; st PLR2_fire
  7280. ; bra dointer
  7281.  
  7282. firenownotpressed2:
  7283. ; fire has been released.
  7284. ; clr.b PLR2_fire
  7285. ; bra dointer
  7286.  
  7287. firenotpressed2
  7288.  
  7289. ; fire was not pressed last frame...
  7290.  
  7291. ; btst #7,$bfe001
  7292. ; if it has still not been pressed, go back above
  7293. ; bne.s firenownotpressed2
  7294. ; fire was not pressed last time, and was this time, so has
  7295. ; been clicked.
  7296. ; st PLR2_clicked
  7297. ; st PLR2_fire
  7298.  
  7299. dointer
  7300.  
  7301.  cmp.b #'4',Prefsfile+1
  7302.  beq fourchannel
  7303.  
  7304.  btst #1,$dff000+intreqr
  7305.  bne.s newsampbitl
  7306.  
  7307.  movem.l (a7)+,d0-d7/a0-a6
  7308.  
  7309.  rte
  7310.  
  7311.  
  7312. swappedem: dc.w 0
  7313.  
  7314. newsampbitl:
  7315.  
  7316.  move.w #$820f,$dff000+dmacon
  7317.  
  7318.  move.w #$200,$dff000+intreq
  7319.  
  7320. ; tst.b CHANNELDATA
  7321. ; bne nochannel0
  7322.  
  7323.  move.l pos0LEFT,a0
  7324.  move.l pos2LEFT,a1
  7325.  
  7326.  move.l #tab,a2
  7327.  
  7328.  moveq #0,d0
  7329.  moveq #0,d1
  7330.  move.b vol0left,d0
  7331.  move.b vol2left,d1
  7332.  cmp.b d1,d0
  7333.  slt swappedem
  7334.  bge.s fbig0
  7335.  
  7336. ; d1 is bigger so scale d0 and use d1
  7337. ; as audiochannel volume.
  7338.  
  7339.  exg a0,a1
  7340.  asl.w #6,d0
  7341.  divs d1,d0
  7342.  lsl.w #8,d0
  7343.  adda.w d0,a2
  7344.  move.w d1,$dff0a8
  7345.  bra.s donechan0
  7346.  
  7347. fbig0:
  7348.  tst.w d0
  7349.  beq.s donechan0
  7350.  asl.w #6,d1
  7351.  divs d0,d1
  7352.  lsl.w #8,d1
  7353.  adda.w d1,a2
  7354.  move.w d0,$dff0a8
  7355.  
  7356. donechan0:
  7357.  
  7358.  move.l Aupt0,a3
  7359.  move.l a3,$dff0a0
  7360.  move.l Auback0,Aupt0
  7361.  move.l a3,Auback0
  7362.  
  7363.  move.l Auback0,a3
  7364.  
  7365.  moveq #0,d0
  7366.  moveq #0,d1
  7367.  moveq #0,d2
  7368.  moveq #0,d3
  7369.  moveq #0,d4
  7370.  moveq #0,d5
  7371.  move.w #49,d7
  7372. loop:
  7373.  move.l (a0)+,d0
  7374.  move.b (a1)+,d1
  7375.  move.b (a1)+,d2
  7376.  move.b (a1)+,d3
  7377.  move.b (a1)+,d4
  7378.  move.b (a2,d3.w),d5
  7379.  swap d5
  7380.  move.b (a2,d1.w),d5
  7381.  asl.l #8,d5
  7382.  move.b (a2,d2.w),d5
  7383.  swap d5
  7384.  move.b (a2,d4.w),d5
  7385.  add.l d5,d0
  7386.  move.l d0,(a3)+
  7387.  dbra d7,loop
  7388.  
  7389.  tst.b swappedem
  7390.  beq.s .ok23
  7391.  exg a0,a1
  7392. .ok23:
  7393.  
  7394.  cmp.l Samp0endLEFT,a0
  7395.  blt.s .notoffendsamp1
  7396.  move.l SampleList+6*8,a0
  7397.  move.l SampleList+6*8+4,Samp0endLEFT
  7398.  move.b #63,vol0left
  7399.  st LEFTCHANDATA+1
  7400.  move.w #0,LEFTCHANDATA+2
  7401. .notoffendsamp1:
  7402.  
  7403.  cmp.l Samp2endLEFT,a1
  7404.  blt.s .notoffendsamp2
  7405.  move.l #empty,a1
  7406.  move.l #emptyend,Samp2endLEFT
  7407.  move.b #0,vol2left
  7408.  st LEFTCHANDATA+1+8
  7409.  move.w #0,LEFTCHANDATA+2+8
  7410. .notoffendsamp2:
  7411.  
  7412.  move.l a0,pos0LEFT
  7413.  move.l a1,pos2LEFT
  7414.  
  7415. nochannel0:
  7416.  
  7417.  tst.b CHANNELDATA+16
  7418.  bne nochannel1
  7419.  
  7420.  
  7421.  move.l pos0RIGHT,a0
  7422.  move.l pos2RIGHT,a1
  7423.  
  7424.  move.l Aupt1,a3
  7425.  move.l a3,$dff0b0
  7426.  move.l Auback1,Aupt1
  7427.  move.l a3,Auback1
  7428.  
  7429.  move.l #tab,a2
  7430.  
  7431.  moveq #0,d0
  7432.  moveq #0,d1
  7433.  move.b vol0right,d0
  7434.  move.b vol2right,d1
  7435.  cmp.b d1,d0
  7436.  slt swappedem
  7437.  bge.s fbig1
  7438.  
  7439. ; d1 is bigger so scale d0 and use d1
  7440. ; as audiochannel volume.
  7441.  
  7442.  exg a0,a1
  7443.  asl.w #6,d0
  7444.  divs d1,d0
  7445.  lsl.w #8,d0
  7446.  adda.w d0,a2
  7447.  move.w d1,$dff0b8
  7448.  bra.s donechan1
  7449.  
  7450. fbig1:
  7451.  tst.w d0
  7452.  beq.s donechan1
  7453.  asl.w #6,d1
  7454.  divs d0,d1
  7455.  lsl.w #8,d1
  7456.  adda.w d1,a2
  7457.  move.w d0,$dff0b8
  7458.  
  7459. donechan1:
  7460.  moveq #0,d0
  7461.  moveq #0,d1
  7462.  moveq #0,d2
  7463.  moveq #0,d3
  7464.  moveq #0,d4
  7465.  moveq #0,d5
  7466.  move.w #49,d7
  7467. loop2:
  7468.  move.l (a0)+,d0
  7469.  move.b (a1)+,d1
  7470.  move.b (a1)+,d2
  7471.  move.b (a1)+,d3
  7472.  move.b (a1)+,d4
  7473.  move.b (a2,d3.w),d5
  7474.  swap d5
  7475.  move.b (a2,d1.w),d5
  7476.  asl.l #8,d5
  7477.  move.b (a2,d2.w),d5
  7478.  swap d5
  7479.  move.b (a2,d4.w),d5
  7480.  add.l d5,d0
  7481.  move.l d0,(a3)+
  7482.  dbra d7,loop2
  7483.  
  7484.  tst.b swappedem
  7485.  beq.s ok01
  7486.  exg a0,a1
  7487. ok01:
  7488.  
  7489.  cmp.l Samp0endRIGHT,a0
  7490.  blt.s .notoffendsamp1
  7491.  move.l #empty,a0
  7492.  move.l #emptyend,Samp0endRIGHT
  7493.  move.b #0,vol0right
  7494.  st RIGHTCHANDATA+1
  7495.  move.w #0,RIGHTCHANDATA+2
  7496. .notoffendsamp1:
  7497.  
  7498.  cmp.l Samp2endRIGHT,a1
  7499.  blt.s .notoffendsamp2
  7500.  move.l #empty,a1
  7501.  move.l #emptyend,Samp2endRIGHT
  7502.  move.b #0,vol2right
  7503.  st RIGHTCHANDATA+1+8
  7504.  move.w #0,RIGHTCHANDATA+2+8
  7505. .notoffendsamp2:
  7506.  
  7507.  move.l a0,pos0RIGHT
  7508.  move.l a1,pos2RIGHT
  7509.  
  7510. nochannel1:
  7511.  
  7512. ******************* Other two channels
  7513.  
  7514.  move.l pos1LEFT,a0
  7515.  move.l pos3LEFT,a1
  7516.  
  7517.  move.l #tab,a2
  7518.  
  7519.  moveq #0,d0
  7520.  moveq #0,d1
  7521.  move.b vol1left,d0
  7522.  move.b vol3left,d1
  7523.  cmp.b d1,d0
  7524.  slt swappedem
  7525.  bge.s fbig2
  7526.  
  7527. ; d1 is bigger so scale d0 and use d1
  7528. ; as audiochannel volume.
  7529.  
  7530.  exg a0,a1
  7531.  asl.w #6,d0
  7532.  divs d1,d0
  7533.  lsl.w #8,d0
  7534.  adda.w d0,a2
  7535.  move.w d1,$dff0d8
  7536.  bra.s donechan2
  7537.  
  7538. fbig2:
  7539.  tst.w d0
  7540.  beq.s donechan2
  7541.  asl.w #6,d1
  7542.  divs d0,d1
  7543.  lsl.w #8,d1
  7544.  adda.w d1,a2
  7545.  move.w d0,$dff0d8
  7546.  
  7547. donechan2:
  7548.  
  7549.  move.l Aupt2,a3
  7550.  move.l a3,$dff0d0
  7551.  move.l Auback2,Aupt2
  7552.  move.l a3,Auback2
  7553.  
  7554.  moveq #0,d0
  7555.  moveq #0,d1
  7556.  moveq #0,d2
  7557.  moveq #0,d3
  7558.  moveq #0,d4
  7559.  moveq #0,d5
  7560.  move.w #49,d7
  7561. loop3:
  7562.  move.l (a0)+,d0
  7563.  move.b (a1)+,d1
  7564.  move.b (a1)+,d2
  7565.  move.b (a1)+,d3
  7566.  move.b (a1)+,d4
  7567.  move.b (a2,d3.w),d5
  7568.  swap d5
  7569.  move.b (a2,d1.w),d5
  7570.  asl.l #8,d5
  7571.  move.b (a2,d2.w),d5
  7572.  swap d5
  7573.  move.b (a2,d4.w),d5
  7574.  add.l d5,d0
  7575.  move.l d0,(a3)+
  7576.  dbra d7,loop3
  7577.  
  7578.  tst.b swappedem
  7579.  beq.s .ok23
  7580.  exg a0,a1
  7581. .ok23:
  7582.  
  7583.  cmp.l Samp1endLEFT,a0
  7584.  blt.s .notoffendsamp3
  7585.  move.l #empty,a0
  7586.  move.l #emptyend,Samp1endLEFT
  7587.  move.b #0,vol1left
  7588.  st LEFTCHANDATA+1+4
  7589.  move.w #0,LEFTCHANDATA+2+4
  7590. .notoffendsamp3:
  7591.  
  7592.  cmp.l Samp3endLEFT,a1
  7593.  blt.s .notoffendsamp4
  7594.  move.l #empty,a1
  7595.  move.l #emptyend,Samp3endLEFT
  7596.  move.b #0,vol3left
  7597.  st LEFTCHANDATA+1+12
  7598.  move.w #0,LEFTCHANDATA+2+12
  7599. .notoffendsamp4:
  7600.  
  7601.  move.l a0,pos1LEFT
  7602.  move.l a1,pos3LEFT
  7603.  
  7604.  move.l pos1RIGHT,a0
  7605.  move.l pos3RIGHT,a1
  7606.  
  7607.  move.l Aupt3,a3
  7608.  move.l a3,$dff0c0
  7609.  move.l Auback3,Aupt3
  7610.  move.l a3,Auback3
  7611.  
  7612.  move.l #tab,a2
  7613.  
  7614.  moveq #0,d0
  7615.  moveq #0,d1
  7616.  move.b vol1right,d0
  7617.  move.b vol3right,d1
  7618.  cmp.b d1,d0
  7619.  slt.s swappedem
  7620.  bge.s fbig3
  7621.  
  7622.  exg a0,a1
  7623.  asl.w #6,d0
  7624.  divs d1,d0
  7625.  lsl.w #8,d0
  7626.  adda.w d0,a2
  7627.  move.w d1,$dff0c8
  7628.  bra.s donechan3
  7629.  
  7630. fbig3:
  7631.  tst.w d0
  7632.  beq.s donechan3
  7633.  asl.w #6,d1
  7634.  divs d0,d1
  7635.  lsl.w #8,d1
  7636.  adda.w d1,a2
  7637.  move.w d0,$dff0c8
  7638. donechan3:
  7639.  
  7640.  moveq #0,d0
  7641.  moveq #0,d1
  7642.  moveq #0,d2
  7643.  moveq #0,d3
  7644.  moveq #0,d4
  7645.  moveq #0,d5
  7646.  move.w #49,d7
  7647. loop4:
  7648.  move.l (a0)+,d0
  7649.  move.b (a1)+,d1
  7650.  move.b (a1)+,d2
  7651.  move.b (a1)+,d3
  7652.  move.b (a1)+,d4
  7653.  move.b (a2,d3.w),d5
  7654.  swap d5
  7655.  move.b (a2,d1.w),d5
  7656.  asl.l #8,d5
  7657.  move.b (a2,d2.w),d5
  7658.  swap d5
  7659.  move.b (a2,d4.w),d5
  7660.  add.l d5,d0
  7661.  move.l d0,(a3)+
  7662.  dbra d7,loop4
  7663.  
  7664.  tst.b swappedem
  7665.  beq.s .ok23
  7666.  exg a0,a1
  7667. .ok23:
  7668.  
  7669.  cmp.l Samp1endRIGHT,a0
  7670.  blt.s notoffendsamp3
  7671.  move.l #empty,a0
  7672.  move.l #emptyend,Samp1endRIGHT
  7673.  move.b #0,vol1right
  7674.  st RIGHTCHANDATA+1+4
  7675.  move.w #0,RIGHTCHANDATA+2+4
  7676. notoffendsamp3:
  7677.  
  7678.  cmp.l Samp3endRIGHT,a1
  7679.  blt.s notoffendsamp4
  7680.  move.l #empty,a1
  7681.  move.l #emptyend,Samp3endRIGHT
  7682.  move.b #0,vol3right
  7683.  st RIGHTCHANDATA+1+12
  7684.  move.w #0,RIGHTCHANDATA+2+12
  7685. notoffendsamp4:
  7686.  
  7687.  move.l a0,pos1RIGHT
  7688.  move.l a1,pos3RIGHT
  7689.  
  7690.  movem.l (a7)+,d0-d7/a0-a6
  7691.  tst.b counting
  7692.  beq .nostartcounter
  7693.  JSR STARTCOUNT
  7694. .nostartcounter:
  7695.  
  7696.  rte
  7697.  
  7698. ***********************************
  7699. * 4 channel sound routine
  7700. ***********************************
  7701.  
  7702. fourchannel:
  7703.  
  7704.  move.l #$dff000,a6
  7705.  
  7706.  btst #7,intreqrl(a6)
  7707.  beq.s nofinish0
  7708. ; move.w #0,LEFTCHANDATA+2
  7709. ; st LEFTCHANDATA+1
  7710.  move.l #null,$a0(a6)
  7711.  move.w #100,$a4(a6) 
  7712.  move.w #$0080,intreq(a6)
  7713. nofinish0:
  7714.  
  7715.  tst.b NoiseMade0pLEFT
  7716.  beq.s NoChan0sound
  7717.  
  7718.  move.l Samp0endLEFT,d0
  7719.  move.l pos0LEFT,d1
  7720.  sub.l d1,d0
  7721.  lsr.l #1,d0
  7722.  move.w d0,$a4(a6)
  7723.  move.l d1,$a0(a6)
  7724.  move.w #$8201,dmacon(a6)
  7725.  moveq #0,d0
  7726.  move.b vol0left,d0
  7727.  move.w d0,$a8(a6)
  7728.  
  7729. NoChan0sound:
  7730.  
  7731. *****************************************
  7732. *****************************************
  7733.  
  7734.  btst #0,intreqr(a6)
  7735.  beq.s nofinish1
  7736.  move.l #null,$b0(a6)
  7737.  move.w #100,$b4(a6)
  7738.  move.w #$0100,intreq(a6)
  7739. nofinish1:
  7740.  
  7741.  tst.b NoiseMade0pRIGHT
  7742.  beq.s NoChan1sound
  7743.  
  7744.  move.l Samp0endRIGHT,d0
  7745.  move.l pos0RIGHT,d1
  7746.  sub.l d1,d0
  7747.  lsr.l #1,d0
  7748.  move.w d0,$b4(a6)
  7749.  move.l d1,$b0(a6)
  7750.  move.w d0,playnull1
  7751.  move.w #$8202,dmacon(a6)
  7752.  moveq #0,d0
  7753.  move.b vol0right,d0
  7754.  move.w d0,$b8(a6)
  7755.  
  7756. NoChan1sound:
  7757.  
  7758. *****************************************
  7759. *****************************************
  7760.  
  7761.  btst #1,intreqr(a6)
  7762.  beq.s nofinish2
  7763.  move.l #null,$c0(a6)
  7764.  move.w #100,$c4(a6)
  7765.  move.w #$0200,intreq(a6)
  7766. nofinish2:
  7767.  
  7768.  tst.b NoiseMade1pRIGHT
  7769.  beq.s NoChan2sound
  7770.  
  7771.  move.l Samp1endRIGHT,d0
  7772.  move.l pos1RIGHT,d1
  7773.  sub.l d1,d0
  7774.  lsr.l #1,d0
  7775.  move.w d0,$c4(a6)
  7776.  move.w d0,playnull2
  7777.  
  7778.  move.l d1,$c0(a6)
  7779.  move.w #$8204,dmacon(a6)
  7780.  moveq #0,d0
  7781.  move.b vol1right,d0
  7782.  move.w d0,$c8(a6)
  7783.  
  7784. NoChan2sound:
  7785.  
  7786. *****************************************
  7787. *****************************************
  7788.  
  7789.  btst #2,intreqr(a6)
  7790.  beq.s nofinish3
  7791.  move.l #null,$d0(a6)
  7792.  move.w #100,$d4(a6)
  7793.  move.w #$0400,intreq(a6)
  7794. nofinish3:
  7795.  
  7796.  tst.b NoiseMade1pLEFT
  7797.  beq.s NoChan3sound
  7798.  
  7799.  move.l Samp1endLEFT,d0
  7800.  move.l pos1LEFT,d1
  7801.  sub.l d1,d0
  7802.  lsr.l #1,d0
  7803.  move.w d0,$d4(a6)
  7804.  move.w d0,playnull3
  7805.  move.l d1,$d0(a6)
  7806.  move.w #$8208,dmacon(a6)
  7807.  moveq #0,d0
  7808.  move.b vol1left,d0
  7809.  move.w d0,$d8(a6)
  7810.  
  7811. NoChan3sound:
  7812.  
  7813. nomorechannels:
  7814.  
  7815.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  7816.  move.l #0,NoiseMade0LEFT
  7817.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  7818.  move.l #0,NoiseMade0RIGHT
  7819.  
  7820. ; tst.b playnull0
  7821. ; beq.s .nnul
  7822. ; sub.b #1,playnull0
  7823. ; bra.s chan0still
  7824. ;.nnul:
  7825. ;chan0still:
  7826.  
  7827.  tst.b NoiseMade0pLEFT
  7828.  bne.s chan0still
  7829.  tst.w playnull0
  7830.  beq.s nnul0
  7831.  sub.w #100,playnull0
  7832.  bra.s chan0still
  7833. nnul0:
  7834.  move.w #0,LEFTCHANDATA+2
  7835.  st LEFTCHANDATA+1
  7836. chan0still:
  7837.  
  7838.  tst.b NoiseMade0pRIGHT
  7839.  bne.s chan1still
  7840.  tst.w playnull1
  7841.  beq.s nnul1
  7842.  sub.w #100,playnull1
  7843.  bra.s chan1still
  7844. nnul1:
  7845.  move.w #0,RIGHTCHANDATA+2
  7846.  st RIGHTCHANDATA+1
  7847. chan1still:
  7848.  
  7849.  tst.b NoiseMade1pRIGHT
  7850.  bne.s chan2still
  7851.  tst.w playnull2
  7852.  beq.s nnul2
  7853.  sub.w #100,playnull2
  7854.  bra.s chan2still
  7855. nnul2:
  7856.  move.w #0,RIGHTCHANDATA+2+4
  7857.  st RIGHTCHANDATA+1+4
  7858. chan2still:
  7859.  
  7860.  tst.b NoiseMade1pLEFT
  7861.  bne.s chan3still
  7862.  tst.w playnull3
  7863.  beq.s nnul3
  7864.  sub.w #100,playnull3
  7865.  bra.s chan3still
  7866. nnul3:
  7867.  move.w #0,LEFTCHANDATA+2+4
  7868.  st LEFTCHANDATA+1+4
  7869.  
  7870. chan3still:
  7871.  
  7872.  
  7873.  movem.l (a7)+,d0-d7/a0-a6
  7874.  
  7875.  rte
  7876.  
  7877. backbeat: dc.w 0
  7878.  
  7879. playnull0: dc.w 0
  7880. playnull1: dc.w 0
  7881. playnull2: dc.w 0
  7882. playnull3: dc.w 0
  7883.  
  7884. Samp0endRIGHT: dc.l emptyend
  7885. Samp1endRIGHT: dc.l emptyend
  7886. Samp2endRIGHT: dc.l emptyend
  7887. Samp3endRIGHT: dc.l emptyend
  7888. Samp0endLEFT: dc.l emptyend
  7889. Samp1endLEFT: dc.l emptyend
  7890. Samp2endLEFT: dc.l emptyend
  7891. Samp3endLEFT: dc.l emptyend
  7892.  
  7893. Aupt0: dc.l null
  7894. Auback0: dc.l null+500
  7895. Aupt2: dc.l null3
  7896. Auback2: dc.l null3+500
  7897. Aupt3: dc.l null4
  7898. Auback3: dc.l null4+500
  7899. Aupt1: dc.l null2
  7900. Auback1: dc.l null2+500
  7901.  
  7902. NoiseMade0LEFT: dc.b 0
  7903. NoiseMade1LEFT: dc.b 0
  7904. NoiseMade2LEFT: dc.b 0
  7905. NoiseMade3LEFT: dc.b 0
  7906. NoiseMade0pLEFT: dc.b 0
  7907. NoiseMade1pLEFT: dc.b 0
  7908. NoiseMade2pLEFT: dc.b 0
  7909. NoiseMade3pLEFT: dc.b 0
  7910. NoiseMade0RIGHT: dc.b 0
  7911. NoiseMade1RIGHT: dc.b 0
  7912. NoiseMade2RIGHT: dc.b 0
  7913. NoiseMade3RIGHT: dc.b 0
  7914. NoiseMade0pRIGHT: dc.b 0
  7915. NoiseMade1pRIGHT: dc.b 0
  7916. NoiseMade2pRIGHT: dc.b 0
  7917. NoiseMade3pRIGHT: dc.b 0
  7918.  
  7919. empty: ds.l 100
  7920. emptyend:
  7921.  
  7922. **************************************
  7923. * I want a routine to calculate all the
  7924. * info needed for the sound player to
  7925. * work, given say position of noise, volume
  7926. * and sample number.
  7927.  
  7928. Samplenum: dc.w 0
  7929. Noisex: dc.w 0
  7930. Noisez: dc.w 0
  7931. Noisevol: dc.w 0
  7932. chanpick: dc.w 0
  7933. IDNUM: dc.w 0
  7934. needleft: dc.b 0
  7935. needright: dc.b 0
  7936. STEREO: dc.b $0
  7937. even
  7938. prot6: dc.w 0
  7939.  
  7940.  even
  7941.  
  7942. CHANNELDATA:
  7943. LEFTCHANDATA:
  7944.  dc.l $00000000
  7945.  dc.l $00000000
  7946.  dc.l $FF000000
  7947.  dc.l $FF000000
  7948. RIGHTCHANDATA:
  7949.  dc.l $00000000
  7950.  dc.l $00000000
  7951.  dc.l $FF000000
  7952.  dc.l $FF000000
  7953.  
  7954. RIGHTPLAYEDTAB: ds.l 20
  7955. LEFTPLAYEDTAB: ds.l 20
  7956.  
  7957. MakeSomeNoise:
  7958.  
  7959. ; Plan for new sound handler:
  7960. ; It is sent a sample number,
  7961. ; a position relative to the
  7962. ; player, an id number and a volume.
  7963. ; Also notifplaying.
  7964.  
  7965. ; indirect inputs are the available
  7966. ; channel flags and whether or not
  7967. ; stereo sound is selected.
  7968.  
  7969. ; the algorithm must decide
  7970. ; whether the new sound is more
  7971. ; important than the ones already
  7972. ; playing. Thus an 'importance'
  7973. ; must be calculated, probably
  7974. ; using volume.
  7975.  
  7976. ; The output needs to be:
  7977.  
  7978. ; Write the pointers and volumes of
  7979. ; the sound channels
  7980.  
  7981.  
  7982.  tst.b notifplaying
  7983.  beq.s dontworry
  7984.  
  7985. ; find if we are already playing
  7986.  
  7987.  move.b IDNUM,d0
  7988.  move.w #7,d1
  7989.  lea CHANNELDATA,a3
  7990. findsameasme
  7991.  tst.b (a3)
  7992.  bne.s notavail
  7993.  cmp.b 1(a3),d0
  7994.  beq SameAsMe
  7995. notavail:
  7996.  add.w #4,a3
  7997.  dbra d1,findsameasme
  7998.  bra dontworry
  7999. SameAsMe
  8000.  rts
  8001.  
  8002. noiseloud: dc.w 0
  8003.  
  8004. dontworry:
  8005.  
  8006. ; Ok its fine for us to play a sound.
  8007. ; So calculate left/right volume.
  8008.  
  8009.  move.w Noisex,d1
  8010.  muls d1,d1
  8011.  move.w Noisez,d2
  8012.  muls d2,d2
  8013.  move.w #64,d3
  8014.  move.w #32767,noiseloud
  8015.  moveq #1,d0
  8016.  add.l d1,d2
  8017.  beq pastcalc
  8018.  
  8019.  move.w #31,d0
  8020. .findhigh
  8021.  btst d0,d2
  8022.  bne .foundhigh
  8023.  dbra d0,.findhigh
  8024. .foundhigh
  8025.  asr.w #1,d0
  8026.  clr.l d3
  8027.  bset d0,d3
  8028.  move.l d3,d0
  8029.  
  8030.  move.w d0,d3
  8031.  muls d3,d3    ; x*x
  8032.  sub.l d2,d3    ; x*x-a
  8033.  asr.l #1,d3    ; (x*x-a)/2
  8034.  divs d0,d3    ; (x*x-a)/2x
  8035.  sub.w d3,d0    ; second approx
  8036.  bgt .stillnot0
  8037.  move.w #1,d0
  8038. .stillnot0
  8039.  
  8040.  move.w d0,d3
  8041.  muls d3,d3
  8042.  sub.l d2,d3
  8043.  asr.l #1,d3
  8044.  divs d0,d3
  8045.  sub.w d3,d0    ; second approx
  8046.  bgt .stillnot02
  8047.  move.w #1,d0
  8048. .stillnot02
  8049.  
  8050.  move.w Noisevol,d3
  8051.  ext.l d3
  8052.  asl.l #6,d3
  8053.  cmp.l #32767,d3
  8054.  ble.s .nnnn
  8055.  move.l #32767,d3
  8056. .nnnn
  8057.  
  8058.  asr.w #2,d0
  8059.  addq #1,d0
  8060.  divs d0,d3
  8061.  
  8062.  move.w d3,noiseloud
  8063.  
  8064.  cmp.w #64,d3
  8065.  ble.s notooloud
  8066.  move.w #64,d3
  8067. notooloud:
  8068.  
  8069. pastcalc:
  8070.  
  8071.     ; d3 contains volume of noise.
  8072.     
  8073.  move.w d3,d4
  8074.  
  8075.  move.w d3,d2
  8076.  muls Noisex,d2
  8077.  asl.w #3,d0
  8078.  divs d0,d2
  8079.  
  8080.  bgt.s quietleft
  8081.  add.w d2,d4
  8082.  bge.s donequiet
  8083.  move.w #0,d4
  8084.  bra.s donequiet
  8085. quietleft:
  8086.  sub.w d2,d3
  8087.  bge.s donequiet
  8088.  move.w #0,d3
  8089. donequiet:
  8090.  
  8091. ; d3=leftvol?
  8092. ; d4=rightvol?
  8093.  
  8094.  clr.w needleft
  8095.  
  8096.  cmp.b d3,d4
  8097.  bgt.s RightLouder
  8098.  
  8099. ; Left is louder; is it MUCH louder?
  8100.  
  8101.  st needleft
  8102.  move.w d3,d2
  8103.  sub.w d4,d2
  8104.  cmp.w #32,d2
  8105.  slt needright
  8106.  bra aboutsame
  8107.  
  8108. RightLouder:
  8109.  st needright
  8110.  move.w d4,d2
  8111.  sub.w d3,d2
  8112.  cmp.w #32,d2
  8113.  slt needleft
  8114.  
  8115. aboutsame:
  8116.  
  8117.  tst.b STEREO
  8118.  beq NOSTEREO
  8119.  
  8120. ; Find least important sound on left
  8121.  
  8122.  move.l #0,a2
  8123.  move.l #0,d5
  8124.  move.w #32767,d2
  8125.  move.b IDNUM,d0
  8126.  lea LEFTCHANDATA,a3
  8127.  move.w #3,d1
  8128. FindLeftChannel
  8129.  tst.b (a3)
  8130.  bne.s .notactive
  8131.  cmp.b 1(a3),d0
  8132.  beq.s FOUNDLEFT
  8133.  cmp.w 2(a3),d2
  8134.  blt.s .notactive
  8135.  move.w 2(a3),d2
  8136.  move.l a3,a2
  8137.  move.w d5,d6
  8138.  
  8139. .notactive:
  8140.  add.w #4,a3
  8141.  add.w #1,d5
  8142.  dbra d1,FindLeftChannel
  8143.  move.l a2,a3
  8144.  bra.s gopastleft
  8145. FOUNDLEFT:
  8146.  move.w d5,d6
  8147. gopastleft:
  8148.  tst.l a3
  8149.  bne.s FOUNDALEFT
  8150.  rts
  8151. FOUNDALEFT:
  8152.  
  8153. ; d6 = channel number
  8154.  move.b d0,1(a3)
  8155.  move.w d3,2(a3)
  8156.  
  8157.  move.w Samplenum,d5
  8158.  move.l #SampleList,a3
  8159.  move.l (a3,d5.w*8),a1
  8160.  move.l 4(a3,d5.w*8),a2
  8161.  
  8162.  tst.b d6
  8163.  seq NoiseMade0LEFT
  8164.  beq.s .chan0
  8165.  cmp.b #2,d6
  8166.  slt NoiseMade1LEFT
  8167.  blt .chan1
  8168.  seq NoiseMade2LEFT
  8169.  beq .chan2
  8170.  st NoiseMade3LEFT
  8171.  
  8172.  move.b d5,LEFTPLAYEDTAB+9
  8173.  move.b d3,LEFTPLAYEDTAB+1+9
  8174.  move.b d4,LEFTPLAYEDTAB+2+9
  8175.  move.b d3,vol3left
  8176.  move.l a1,pos3LEFT
  8177.  move.l a2,Samp3endLEFT
  8178.  bra dorightchan
  8179.  
  8180. .chan0: 
  8181.  move.b d5,LEFTPLAYEDTAB
  8182.  move.b d3,LEFTPLAYEDTAB+1
  8183.  move.b d4,LEFTPLAYEDTAB+2
  8184.  move.l a1,pos0LEFT
  8185.  move.l a2,Samp0endLEFT
  8186.  move.b d3,vol0left
  8187.  bra dorightchan
  8188.  
  8189. .chan1:
  8190.  move.b d5,LEFTPLAYEDTAB+3
  8191.  move.b d3,LEFTPLAYEDTAB+1+3
  8192.  move.b d4,LEFTPLAYEDTAB+2+3
  8193.  move.b d3,vol1left
  8194.  move.l a1,pos1LEFT
  8195.  move.l a2,Samp1endLEFT
  8196.  bra dorightchan
  8197.  
  8198. .chan2: 
  8199.  move.b d5,LEFTPLAYEDTAB+6
  8200.  move.b d3,LEFTPLAYEDTAB+1+6
  8201.  move.b d4,LEFTPLAYEDTAB+2+6
  8202.  move.l a1,pos2LEFT
  8203.  move.l a2,Samp2endLEFT
  8204.  move.b d3,vol2left
  8205.  
  8206. dorightchan:
  8207.  
  8208. ; Find least important sound on right
  8209.  
  8210.  move.l #0,a2
  8211.  move.l #0,d5
  8212.  move.w #10000,d2
  8213.  move.b IDNUM,d0
  8214.  lea RIGHTCHANDATA,a3
  8215.  move.w #3,d1
  8216. FindRightChannel
  8217.  tst.b (a3)
  8218.  bne.s .notactive
  8219.  cmp.b 1(a3),d0
  8220.  beq.s FOUNDRIGHT
  8221.  cmp.w 2(a3),d2
  8222.  blt.s .notactive
  8223.  move.w 2(a3),d2
  8224.  move.l a3,a2
  8225.  move.w d5,d6
  8226.  
  8227. .notactive:
  8228.  add.w #4,a3
  8229.  add.w #1,d5
  8230.  dbra d1,FindRightChannel
  8231.  move.l a2,a3
  8232.  bra.s gopastright
  8233. FOUNDRIGHT:
  8234.  move.w d5,d6
  8235. gopastright:
  8236.  tst.l a3
  8237.  bne.s FOUNDARIGHT
  8238.  rts
  8239. FOUNDARIGHT:
  8240.  
  8241. ; d6 = channel number
  8242.  move.b d0,1(a3)
  8243.  move.w d3,2(a3)
  8244.  
  8245.  move.w Samplenum,d5
  8246.  move.l #SampleList,a3
  8247.  move.l (a3,d5.w*8),a1
  8248.  move.l 4(a3,d5.w*8),a2
  8249.  
  8250.  tst.b d6
  8251.  seq NoiseMade0RIGHT
  8252.  beq.s .chan0
  8253.  cmp.b #2,d6
  8254.  slt NoiseMade1RIGHT
  8255.  blt .chan1
  8256.  seq NoiseMade2RIGHT
  8257.  beq .chan2
  8258.  st NoiseMade3RIGHT
  8259.  
  8260.  move.b d5,RIGHTPLAYEDTAB+9
  8261.  move.b d3,RIGHTPLAYEDTAB+1+9
  8262.  move.b d4,RIGHTPLAYEDTAB+2+9
  8263.  move.b d4,vol3right
  8264.  move.l a1,pos3RIGHT
  8265.  move.l a2,Samp3endRIGHT
  8266.  rts
  8267.  
  8268. .chan0: 
  8269.  move.b d5,RIGHTPLAYEDTAB
  8270.  move.b d3,RIGHTPLAYEDTAB+1
  8271.  move.b d4,RIGHTPLAYEDTAB+2
  8272.  move.l a1,pos0RIGHT
  8273.  move.l a2,Samp0endRIGHT
  8274.  move.b d4,vol0right
  8275.  rts
  8276.  
  8277. .chan1:
  8278.  move.b d5,RIGHTPLAYEDTAB+3
  8279.  move.b d3,RIGHTPLAYEDTAB+1+3
  8280.  move.b d4,RIGHTPLAYEDTAB+2+3
  8281.  move.b d3,vol1right
  8282.  move.l a1,pos1RIGHT
  8283.  move.l a2,Samp1endRIGHT
  8284.  rts
  8285.  
  8286. .chan2: 
  8287.  move.b d5,RIGHTPLAYEDTAB+6
  8288.  move.b d3,RIGHTPLAYEDTAB+1+6
  8289.  move.b d4,RIGHTPLAYEDTAB+2+6
  8290.  move.l a1,pos2RIGHT
  8291.  move.l a2,Samp2endRIGHT
  8292.  move.b d3,vol2right
  8293.  rts
  8294.  
  8295. NOSTEREO:
  8296.  move.l #0,a2
  8297.  move.l #-1,d5
  8298.  move.w #32767,d2
  8299.  move.b IDNUM,d0
  8300.  lea CHANNELDATA,a3
  8301.  move.w #7,d1
  8302. FindChannel
  8303.  tst.b (a3)
  8304.  bne.s .notactive
  8305.  cmp.b 1(a3),d0
  8306.  beq.s FOUNDCHAN
  8307.  cmp.w 2(a3),d2
  8308.  blt.s .notactive
  8309.  move.w 2(a3),d2
  8310.  move.l a3,a2
  8311.  move.w d5,d6
  8312.  add.w #1,d6
  8313.  
  8314. .notactive:
  8315.  add.w #4,a3
  8316.  add.w #1,d5
  8317.  dbra d1,FindChannel
  8318.  
  8319.  move.l a2,a3
  8320.  bra.s gopastchan
  8321. FOUNDCHAN:
  8322.  move.w d5,d6
  8323.  add.w #1,d6
  8324. gopastchan:
  8325.  tst.w d6
  8326.  bge.s FOUNDACHAN
  8327. tooquiet:
  8328.  rts
  8329. FOUNDACHAN:
  8330.  
  8331. ; d6 = channel number
  8332.  
  8333.  cmp.w noiseloud,d2
  8334.  bgt.s tooquiet
  8335.  
  8336.  move.b d0,1(a3)
  8337.  move.w noiseloud,2(a3)
  8338.  
  8339.  move.w Samplenum,d5
  8340.  move.l #SampleList,a3
  8341.  move.l (a3,d5.w*8),a1
  8342.  move.l 4(a3,d5.w*8),a2
  8343.  
  8344.  tst.b d6
  8345.  beq .chan0
  8346.  cmp.b #2,d6
  8347.  blt .chan1
  8348.  beq .chan2
  8349.  cmp.b #4,d6
  8350.  blt .chan3
  8351.  beq .chan4
  8352.  cmp.b #6,d6
  8353.  blt .chan5
  8354.  beq .chan6
  8355.  st NoiseMade3RIGHT
  8356.  
  8357.  move.b d5,RIGHTPLAYEDTAB+9
  8358.  move.b d3,RIGHTPLAYEDTAB+1+9
  8359.  move.b d4,RIGHTPLAYEDTAB+2+9
  8360.  move.b d4,vol3right
  8361.  move.l a1,pos3RIGHT
  8362.  move.l a2,Samp3endRIGHT
  8363.  rts
  8364.  
  8365. .chan3:
  8366.  st NoiseMade3LEFT
  8367.  move.b d5,LEFTPLAYEDTAB+9
  8368.  move.b d3,LEFTPLAYEDTAB+1+9
  8369.  move.b d4,LEFTPLAYEDTAB+2+9
  8370.  move.b d3,vol3left
  8371.  move.l a1,pos3LEFT
  8372.  move.l a2,Samp3endLEFT
  8373.  bra dorightchan
  8374.  
  8375. .chan0: 
  8376.  st NoiseMade0LEFT
  8377.  move.b d5,LEFTPLAYEDTAB
  8378.  move.b d3,LEFTPLAYEDTAB+1
  8379.  move.b d4,LEFTPLAYEDTAB+2
  8380.  move.l a1,pos0LEFT
  8381.  move.l a2,Samp0endLEFT
  8382.  move.b d3,vol0left
  8383.  rts
  8384.  
  8385. .chan1:
  8386.  st NoiseMade1LEFT
  8387.  move.b d5,LEFTPLAYEDTAB+3
  8388.  move.b d3,LEFTPLAYEDTAB+1+3
  8389.  move.b d4,LEFTPLAYEDTAB+2+3
  8390.  move.b d3,vol1left
  8391.  move.l a1,pos1LEFT
  8392.  move.l a2,Samp1endLEFT
  8393.  rts
  8394.  
  8395. .chan2: 
  8396.  st NoiseMade2LEFT
  8397.  move.b d5,LEFTPLAYEDTAB+6
  8398.  move.b d3,LEFTPLAYEDTAB+1+6
  8399.  move.b d4,LEFTPLAYEDTAB+2+6
  8400.  move.l a1,pos2LEFT
  8401.  move.l a2,Samp2endLEFT
  8402.  move.b d3,vol2left
  8403.  rts
  8404.  
  8405. .chan4: 
  8406.  st NoiseMade0RIGHT
  8407.  move.b d5,RIGHTPLAYEDTAB
  8408.  move.b d3,RIGHTPLAYEDTAB+1
  8409.  move.b d4,RIGHTPLAYEDTAB+2
  8410.  move.l a1,pos0RIGHT
  8411.  move.l a2,Samp0endRIGHT
  8412.  move.b d4,vol0right
  8413.  rts
  8414.  
  8415. .chan5:
  8416.  st NoiseMade1RIGHT
  8417.  move.b d5,RIGHTPLAYEDTAB+3
  8418.  move.b d3,RIGHTPLAYEDTAB+1+3
  8419.  move.b d4,RIGHTPLAYEDTAB+2+3
  8420.  move.b d3,vol1right
  8421.  move.l a1,pos1RIGHT
  8422.  move.l a2,Samp1endRIGHT
  8423.  rts
  8424.  
  8425. .chan6: 
  8426.  st NoiseMade2RIGHT
  8427.  move.b d5,RIGHTPLAYEDTAB+6
  8428.  move.b d3,RIGHTPLAYEDTAB+1+6
  8429.  move.b d4,RIGHTPLAYEDTAB+2+6
  8430.  move.l a1,pos2RIGHT
  8431.  move.l a2,Samp2endRIGHT
  8432.  move.b d3,vol2right
  8433.  rts
  8434.  
  8435. SampleList:
  8436.  dc.l Scream,EndScream
  8437.  dc.l Shoot,EndShoot
  8438.  dc.l Munch,EndMunch
  8439.  dc.l PooGun,EndPooGun
  8440.  dc.l Collect,EndCollect
  8441. ;5
  8442.  dc.l DoorNoise,EndDoorNoise
  8443.  dc.l 0,0
  8444.  dc.l Stomp,EndStomp
  8445.  dc.l LowScream,EndLowScream
  8446.  dc.l BaddieGun,EndBaddieGun
  8447. ;10
  8448.  dc.l SwitchNoise,EndSwitch
  8449.  dc.l Reload,EndReload
  8450.  dc.l NoAmmo,EndNoAmmo
  8451.  dc.l Splotch,EndSplotch
  8452.  dc.l SplatPop,EndSplatPop
  8453. ;15
  8454.  dc.l Boom,EndBoom
  8455.  dc.l Hiss,EndHiss
  8456.  dc.l Howl1,EndHowl1
  8457.  dc.l Howl2,EndHowl2
  8458.  dc.l Pant,EndPant
  8459. ;20
  8460.  dc.l Whoosh,EndWhoosh
  8461.  dc.l ROAR,EndROAR
  8462.  dc.l whoosh,Endwhoosh
  8463.  dc.l 0,0
  8464.  dc.l 0,0
  8465.  dc.l 0,0
  8466.  dc.l 0,0
  8467.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8468.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8469.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8470.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8471.  
  8472.  dc.l 0
  8473.  
  8474. storeval: dc.w 0
  8475.  
  8476.  include "ab3:source/wallchunk.s"
  8477.  include "ab3:source/loadfromdisk.s"
  8478.  include "ab3:source/screensetup.s"
  8479.  include "ab3:source/CONTROLLOOP.s"
  8480.  
  8481.  
  8482.  
  8483.  
  8484. saveinters:  
  8485.  dc.w 0
  8486.  
  8487. z: dc.w 10
  8488.  
  8489. notifplaying:
  8490.  dc.w 0
  8491.  
  8492. audpos1: dc.w 0
  8493. audpos1b: dc.w 0
  8494. audpos2: dc.w 0
  8495. audpos2b: dc.w 0
  8496. audpos3: dc.w 0
  8497. audpos3b: dc.w 0
  8498. audpos4: dc.w 0
  8499. audpos4b: dc.w 0
  8500.  
  8501. vol0left: dc.w 0
  8502. vol0right: dc.w 0
  8503. vol1left: dc.w 0
  8504. vol1right: dc.w 0
  8505. vol2left: dc.w 0
  8506. vol2right: dc.w 0
  8507. vol3left: dc.w 0
  8508. vol3right: dc.w 0
  8509.  
  8510. pos: dc.l 0
  8511.  
  8512. pos0LEFT: dc.l empty
  8513. pos1LEFT: dc.l empty
  8514. pos2LEFT: dc.l empty
  8515. pos3LEFT: dc.l empty
  8516. pos0RIGHT: dc.l empty
  8517. pos1RIGHT: dc.l empty
  8518. pos2RIGHT: dc.l empty
  8519. pos3RIGHT: dc.l empty
  8520.  
  8521. numtodo dc.w 0
  8522.  
  8523. npt: dc.w 0
  8524.  
  8525. pretab:
  8526. val SET 0
  8527.  REPT 128
  8528.  dc.b val
  8529. val SET val+1
  8530.  ENDR
  8531. val SET -128
  8532.  REPT 128
  8533.  dc.b val
  8534. val SET val+1
  8535.  ENDR 
  8536.  
  8537. tab:
  8538.  ds.b 256*65
  8539.  
  8540.  
  8541. test: dc.l 0
  8542.  ds.l 30
  8543.  
  8544.  even
  8545. ConstCols:
  8546. ; incbin "ConstCols"
  8547.  even
  8548. Smoothscalecols:
  8549. ; incbin "smoothbumppalscaled"
  8550.  even
  8551. SmoothTile:
  8552. ; incbin "smoothbumptile"
  8553.  even
  8554. Bumpscalecols:
  8555. ; incbin "Bumppalscaled"
  8556.  even
  8557. Bumptile:
  8558. ; incbin "bumptile"
  8559.  even
  8560. scalecols: ;incbin "bytepixpalscaled"
  8561.  even
  8562. floorscalecols:
  8563.  incbin "floorpalscaled"
  8564.  ds.w 256*4
  8565.  
  8566.  even
  8567. PaletteAddr: dc.l 0
  8568. ChunkAddr: dc.l 0
  8569. ;walltiles:
  8570. ; dc.l GreenMechanicWALL
  8571. ; dc.l BlueGreyMetalWALL
  8572. ; dc.l TechnoDetailWALL
  8573. ; dc.l BlueStoneWALL
  8574. ; dc.l RedAlertWALL
  8575. ; dc.l RockWALL
  8576. ;
  8577. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8578. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8579. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8580. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8581. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8582. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8583.  
  8584. floortile:
  8585.  dc.l 0
  8586. ; incbin "floortile" 
  8587.  even
  8588. wallrouts:
  8589. ; incbin "2x2WallDraw" 
  8590.  CNOP 0,64
  8591. BackPicture:
  8592.  incbin "backfile"
  8593. EndBackPicture:
  8594.  
  8595. drawpt: dc.l 0
  8596. olddrawpt: dc.l 0
  8597. frompt: dc.l 0 
  8598.  
  8599. SineTable:
  8600.  incbin "bigsine"
  8601.  
  8602. angspd: dc.w 0
  8603. flooryoff: dc.w 0
  8604. xoff: dc.l 0
  8605. yoff: dc.l 0
  8606. yvel: dc.l 0
  8607. zoff: dc.l 0
  8608. tyoff: dc.l 0
  8609. xspdval: dc.l 0
  8610. zspdval: dc.l 0
  8611. Zone: dc.w 0
  8612.  
  8613. PLR1: dc.b $ff
  8614.  even
  8615. PLR1_energy: dc.w 191
  8616. PLR1_GunSelected: dc.w 0
  8617. PLR1_cosval: dc.w 0
  8618. PLR1_sinval: dc.w 0
  8619. PLR1_angpos: dc.w 0
  8620. PLR1_angspd: dc.w 0
  8621. PLR1_xoff: dc.l 0
  8622. PLR1_yoff: dc.l 0
  8623. PLR1_yvel: dc.l 0
  8624. PLR1_zoff: dc.l 0
  8625. PLR1_tyoff: dc.l 0
  8626. PLR1_xspdval: dc.l 0
  8627. PLR1_zspdval: dc.l 0
  8628. PLR1_Zone: dc.w 0
  8629. PLR1_Roompt: dc.l 0
  8630. PLR1_OldRoompt: dc.l 0
  8631. PLR1_PointsToRotatePtr: dc.l 0
  8632. PLR1_ListOfGraphRooms: dc.l 0
  8633. PLR1_oldxoff: dc.l 0
  8634. PLR1_oldzoff: dc.l 0
  8635. PLR1_StoodInTop: dc.b 0
  8636.  even
  8637. PLR1_height: dc.l 0
  8638.  
  8639.  ds.w 4
  8640.  
  8641. OLDX1: dc.l 0
  8642. OLDX2: dc.l 0
  8643. OLDZ1: dc.l 0
  8644. OLDZ2: dc.l 0
  8645.  
  8646. XDIFF1: dc.l 0
  8647. ZDIFF1: dc.l 0
  8648. XDIFF2: dc.l 0
  8649. ZDIFF2: dc.l 0
  8650.  
  8651. PLR1s_cosval: dc.w 0
  8652. PLR1s_sinval: dc.w 0
  8653. PLR1s_angpos: dc.w 0
  8654. PLR1s_angspd: dc.w 0
  8655. PLR1s_xoff: dc.l 0
  8656. PLR1s_yoff: dc.l 0
  8657. PLR1s_yvel: dc.l 0
  8658. PLR1s_zoff: dc.l 0
  8659. PLR1s_tyoff: dc.l 0
  8660. PLR1s_xspdval: dc.l 0
  8661. PLR1s_zspdval: dc.l 0
  8662. PLR1s_Zone: dc.w 0
  8663. PLR1s_Roompt: dc.l 0
  8664. PLR1s_OldRoompt: dc.l 0
  8665. PLR1s_PointsToRotatePtr: dc.l 0
  8666. PLR1s_ListOfGraphRooms: dc.l 0
  8667. PLR1s_oldxoff: dc.l 0
  8668. PLR1s_oldzoff: dc.l 0
  8669. PLR1s_height: dc.l 0
  8670. PLR1s_targheight: dc.l 0
  8671.  
  8672. p1_xoff: dc.l 0
  8673. p1_zoff: dc.l 0
  8674. p1_yoff: dc.l 0
  8675. p1_height: dc.l 0
  8676. p1_angpos: dc.w 0
  8677. p1_bobble: dc.w 0
  8678. p1_clicked: dc.b 0
  8679. p1_spctap: dc.b 0
  8680. p1_ducked: dc.b 0
  8681. p1_gunselected: dc.b 0
  8682. p1_fire: dc.b 0
  8683.  even
  8684. p1_holddown: dc.w 0
  8685.  
  8686.  ds.w 4
  8687.  
  8688. PLR2: dc.b $ff
  8689.  even
  8690. PLR2_GunSelected: dc.w 0
  8691. PLR2_energy: dc.w 191
  8692. PLR2_cosval: dc.w 0
  8693. PLR2_sinval: dc.w 0
  8694. PLR2_angpos: dc.w 0
  8695. PLR2_angspd: dc.w 0
  8696. PLR2_xoff: dc.l 0
  8697. PLR2_yoff: dc.l 0
  8698. PLR2_yvel: dc.l 0
  8699. PLR2_zoff: dc.l 0
  8700. PLR2_tyoff: dc.l 0
  8701. PLR2_xspdval: dc.l 0
  8702. PLR2_zspdval: dc.l 0
  8703. PLR2_Zone: dc.w 0
  8704. PLR2_Roompt: dc.l 0
  8705. PLR2_OldRoompt: dc.l 0
  8706. PLR2_PointsToRotatePtr: dc.l 0
  8707. PLR2_ListOfGraphRooms: dc.l 0
  8708. PLR2_oldxoff: dc.l 0
  8709. PLR2_oldzoff: dc.l 0
  8710. PLR2_StoodInTop: dc.b 0
  8711.  even
  8712. PLR2_height: dc.l 0
  8713.  
  8714.  ds.w 4
  8715.  
  8716. PLR2s_cosval: dc.w 0
  8717. PLR2s_sinval: dc.w 0
  8718. PLR2s_angpos: dc.w 0
  8719. PLR2s_angspd: dc.w 0
  8720. PLR2s_xoff: dc.l 0
  8721. PLR2s_yoff: dc.l 0
  8722. PLR2s_yvel: dc.l 0
  8723. PLR2s_zoff: dc.l 0
  8724. PLR2s_tyoff: dc.l 0
  8725. PLR2s_xspdval: dc.l 0
  8726. PLR2s_zspdval: dc.l 0
  8727. PLR2s_Zone: dc.w 0
  8728. PLR2s_Roompt: dc.l 0
  8729. PLR2s_OldRoompt: dc.l 0
  8730. PLR2s_PointsToRotatePtr: dc.l 0
  8731. PLR2s_ListOfGraphRooms: dc.l 0
  8732. PLR2s_oldxoff: dc.l 0
  8733. PLR2s_oldzoff: dc.l 0
  8734. PLR2s_height: dc.l 0
  8735. PLR2s_targheight: dc.l 0
  8736.  
  8737.  ds.w 4
  8738.  
  8739. p2_xoff: dc.l 0
  8740. p2_zoff: dc.l 0
  8741. p2_yoff: dc.l 0
  8742. p2_height: dc.l 0
  8743. p2_angpos: dc.w 0
  8744. p2_bobble: dc.w 0
  8745. p2_clicked: dc.b 0
  8746. p2_spctap: dc.b 0
  8747. p2_ducked: dc.b 0
  8748. p2_gunselected: dc.b 0
  8749. p2_fire: dc.b 0
  8750.  even
  8751. p2_holddown: dc.w 0
  8752.  
  8753.  
  8754. liftanimtab:
  8755.  
  8756.  
  8757. endliftanimtab:
  8758.  
  8759. glassball:
  8760. ; incbin "glassball.inc"
  8761. endglass
  8762. glassballpt: dc.l glassball
  8763.  
  8764. rndtab: ; incbin "randfile"
  8765. endrnd: 
  8766.  
  8767. brightanimtab:
  8768.  dcb.w 200,20
  8769.  dc.w 5
  8770.  dc.w 10,20
  8771.  dc.w 5
  8772.  dcb.w 30,20
  8773.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  8774.  dcb.w 40,0
  8775.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  8776.  dcb.w 300,0
  8777.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  8778.  dc.w -1
  8779.  
  8780. Roompt: dc.l 0
  8781. OldRoompt: dc.l 0
  8782.  
  8783. *****************************************************************
  8784.  *
  8785.  include "AB3:source/LevelData2"
  8786.  *
  8787. *****************************************************************
  8788.  
  8789.  
  8790. wallpt: dc.l 0
  8791. floorpt: dc.l 0
  8792.  
  8793. Rotated:
  8794.  ds.l 2*800 
  8795. ObjRotated:
  8796.  ds.l 2*500
  8797.  
  8798. OnScreen:
  8799.  ds.l 2*800 
  8800.  
  8801. startwait: dc.w 0
  8802. endwait: dc.w 0
  8803.  
  8804. Faces:; incbin "faces2raw"
  8805.  
  8806. *******************************************************************
  8807.  
  8808. consttab:
  8809.  incbin "constantfile"
  8810.  
  8811. *******************************************************************
  8812.  
  8813.  
  8814.  
  8815. *********************************
  8816.  
  8817. ; include "ab3:source/loadmod.a"
  8818. ; include "ab3:source/proplayer.a"
  8819.  
  8820.  
  8821. darkentab: incbin "darkenedcols"
  8822. brightentab: incbin "brightenfile"
  8823. WorkSpace:
  8824.  ds.l 8192 
  8825. waterfile: incbin "waterfile"
  8826.  
  8827.  SECTION ffff,CODE_C
  8828.  
  8829. nullspr: dc.l 0
  8830.  
  8831.  cnop 0,8
  8832. borders:
  8833.  incbin "leftbord"
  8834.  incbin "rightbord"
  8835.  
  8836. health: incbin "healthstrip"
  8837. Ammunition: incbin "ammostrip"
  8838. healthpal: incbin "healthpal"
  8839. PanelKeys: incbin "greenkey"
  8840.  incbin "redkey"
  8841.  incbin "yellowkey"
  8842.  incbin "bluekey"
  8843.  
  8844. null: ds.w 500
  8845. null2: ds.w 500
  8846. null3: ds.w 500
  8847. null4: ds.w 500
  8848.  
  8849.  
  8850. Blurbfield:
  8851.  
  8852.  dc.w bpl1ptl
  8853. bl1l: dc.w 0
  8854.  dc.w bpl1pth
  8855. bl1h: dc.w 0
  8856.  
  8857.  dc.w diwstart,$2c81
  8858.  dc.w diwstop,$1cc1
  8859.  dc.w ddfstart,$38
  8860.  dc.w ddfstop,$b8
  8861.  dc.w bplcon0,$9201
  8862.  dc.w bplcon1,0
  8863.  dc.w $106,$c40
  8864. blcols:
  8865.  dc.w col0,0
  8866.  dc.w col1,$fff
  8867.  
  8868.  dc.w $108,0
  8869.  dc.w $10a,0
  8870.  
  8871.  dc.w $ffff,$fffe
  8872.  dc.w $ffff,$fffe
  8873.  
  8874. nullline:
  8875.  ds.b 80    
  8876.  
  8877.  include "ab3:source/titlecop.s"
  8878.  
  8879. bigfield:    
  8880.                 ; Start of our copper list.
  8881.  
  8882.  dc.w dmacon,$8020
  8883.  dc.w intreq,$8011
  8884.  dc.w $1fc,$f
  8885.  dc.w diwstart
  8886. winstart: dc.w $2cb1
  8887.  dc.w diwstop
  8888. winstop: dc.w $2c91
  8889.  dc.w ddfstart
  8890. fetchstart: dc.w $48
  8891.  dc.w ddfstop
  8892. fetchstop: dc.w $88
  8893.  
  8894. bordercols:
  8895.  incbin "borderpal"
  8896.  
  8897.  dc.w spr0ptl
  8898. s0l:
  8899.  dc.w 0
  8900.  dc.w spr0pth
  8901. s0h:
  8902.  dc.w 0
  8903.  dc.w spr1ptl
  8904. s1l:
  8905.  dc.w 0
  8906.  dc.w spr1pth
  8907. s1h:
  8908.  dc.w 0
  8909.  dc.w spr2ptl
  8910. s2l:
  8911.  dc.w 0
  8912.  dc.w spr2pth
  8913. s2h:
  8914.  dc.w 0
  8915.  dc.w spr3ptl
  8916. s3l:
  8917.  dc.w 0
  8918.  dc.w spr3pth
  8919. s3h:
  8920.  dc.w 0
  8921.  dc.w spr4ptl
  8922. s4l:
  8923.  dc.w 0
  8924.  dc.w spr4pth
  8925. s4h:
  8926.  dc.w 0
  8927.  dc.w spr5ptl
  8928. s5l:
  8929.  dc.w 0
  8930.  dc.w spr5pth
  8931. s5h:
  8932.  dc.w 0
  8933.  dc.w spr6ptl
  8934. s6l:
  8935.  dc.w 0
  8936.  dc.w spr6pth
  8937. s6h:
  8938.  dc.w 0
  8939.  dc.w spr7ptl
  8940. s7l:
  8941.  dc.w 0
  8942.  dc.w spr7pth
  8943. s7h:
  8944.  dc.w 0
  8945.  
  8946.  
  8947.  dc.w $106,$c42
  8948.  incbin "borderpal"
  8949.  
  8950.  dc.w $106,$8c42
  8951.  dc.w col0
  8952. hitcol: dc.w $0
  8953.  dc.w $106,$c42
  8954.  dc.w col0
  8955. hitcol2: dc.w 0
  8956.  
  8957.  dc.w bplcon0,$7201
  8958.  dc.w bplcon1
  8959. smoff:
  8960.  dc.w $0
  8961.  
  8962.  dc.w $108
  8963. modulo: dc.w -24
  8964.  dc.w $10a,-24
  8965.  
  8966.  dc.w bpl1pth
  8967. pl1h
  8968.  dc.w 0
  8969.  
  8970.  dc.w bpl1ptl
  8971. pl1l
  8972.  dc.w 0
  8973.  
  8974.  dc.w bpl2pth
  8975. pl2h
  8976.  dc.w 0
  8977.  
  8978.  dc.w bpl2ptl
  8979. pl2l
  8980.  dc.w 0
  8981.  
  8982.  dc.w bpl3pth
  8983. pl3h
  8984.  dc.w 0
  8985.  
  8986.  dc.w bpl3ptl
  8987. pl3l
  8988.  dc.w 0
  8989.  
  8990.  dc.w bpl4pth
  8991. pl4h
  8992.  dc.w 0
  8993.  
  8994.  dc.w bpl4ptl
  8995. pl4l
  8996.  dc.w 0
  8997.  
  8998.  dc.w bpl5pth
  8999. pl5h
  9000.  dc.w 0
  9001.  
  9002.  dc.w bpl5ptl
  9003. pl5l
  9004.  dc.w 0
  9005.  
  9006.  dc.w bpl6pth
  9007. pl6h
  9008.  dc.w 0
  9009.  
  9010.  dc.w bpl6ptl
  9011. pl6l
  9012.  dc.w 0
  9013.  
  9014.  dc.w bpl7pth
  9015. pl7h
  9016.  dc.w 0
  9017.  
  9018.  dc.w bpl7ptl
  9019. pl7l
  9020.  dc.w 0
  9021.  
  9022.  
  9023.  dc.w $1001,$ff00
  9024.  dc.w intreq,$11
  9025. yposcop:
  9026.  dc.w $2a11,$fffe
  9027.  dc.w $8a,0
  9028.  
  9029. ; ds.l 104*12
  9030.  
  9031. ;colbars:
  9032. ;val SET $2a
  9033. ; dcb.l 104*80,$1fe0000
  9034. ; dc.w $106,$c42
  9035. ; dc.w $80
  9036. ;pch1:
  9037. ; dc.w 0
  9038. ; dc.w $82
  9039. ;pcl1:
  9040. ; dc.w 0 
  9041. ; dc.w $88,0
  9042. ; dc.w $ffff,$fffe       ; End copper list.
  9043.  
  9044. ; ds.l 104*12
  9045.  
  9046. ;colbars2:
  9047. ;val SET $2a
  9048. ; dcb.l 104*80,$1fe0000
  9049. ; dc.w $106,$c42
  9050. ; dc.w $80
  9051. ;pch2:
  9052. ; dc.w 0
  9053. ; dc.w $82
  9054. ;pcl2:
  9055. ; dc.w 0
  9056. ; dc.w $88,0
  9057. ; dc.w $ffff,$fffe       ; End copper list.
  9058.  
  9059. ; ds.l 104*10
  9060.  
  9061. NullCopper:
  9062.  dc.w $ffff,$fffe
  9063.  
  9064. old: dc.l 0
  9065.  
  9066. prot5: dc.w 0
  9067. PanelCop:
  9068.  
  9069.  dc.w $80
  9070. och:
  9071.  dc.w 0
  9072.  dc.w $82
  9073. ocl:
  9074.  dc.w 0
  9075.  
  9076. statskip:
  9077.  dc.w $1fe,0
  9078.  dc.w $1fe,0
  9079.  
  9080.  dc.w $10c,0
  9081.  dc.w bplcon0,$1201
  9082.  dc.w bpl1ptl
  9083. n1l:
  9084.  dc.w 0
  9085.  dc.w bpl1pth
  9086. n1h:
  9087.  dc.w 0
  9088.  dc.w $108,-24
  9089.  incbin "Panelpal"
  9090.  
  9091.  dc.w bpl2pth
  9092. p2h
  9093.  dc.w 0
  9094.  
  9095.  dc.w bpl2ptl
  9096. p2l
  9097.  dc.w 0
  9098.  
  9099.  dc.w bpl3pth
  9100. p3h
  9101.  dc.w 0
  9102.  
  9103.  dc.w bpl3ptl
  9104. p3l
  9105.  dc.w 0
  9106.  
  9107.  dc.w bpl4pth
  9108. p4h
  9109.  dc.w 0
  9110.  dc.w bpl4ptl
  9111. p4l
  9112.  dc.w 0
  9113.  dc.w bpl5pth
  9114. p5h
  9115.  dc.w 0
  9116.  dc.w bpl5ptl
  9117. p5l
  9118.  dc.w 0
  9119.  dc.w bpl6pth
  9120. p6h
  9121.  dc.w 0
  9122.  dc.w bpl6ptl
  9123. p6l
  9124.  dc.w 0
  9125.  dc.w bpl7pth
  9126. p7h
  9127.  dc.w 0
  9128.  dc.w bpl7ptl
  9129. p7l
  9130.  dc.w 0
  9131.  dc.w bpl8pth
  9132. p8h
  9133.  dc.w 0
  9134.  dc.w bpl8ptl
  9135. p8l
  9136.  dc.w 0
  9137.  
  9138.  
  9139.  dc.w ddfstart,$38
  9140.  dc.w ddfstop,$b8
  9141.  dc.w diwstart,$2c81
  9142.  dc.w diwstop,$2cc1
  9143.  
  9144.  dc.w bplcon0
  9145. Panelcon: dc.w $0211
  9146.  dc.w bpl1pth
  9147. p1h
  9148.  dc.w 0
  9149.  
  9150.  dc.w bpl1ptl
  9151. p1l
  9152.  dc.w 0
  9153.  
  9154.  
  9155.  dc.w $108,40*7
  9156.  dc.w $10a,40*7
  9157.  
  9158.  dc.w $ffff,$fffe
  9159.  
  9160.  dc.w $180,$fff
  9161.  
  9162.  
  9163.  dc.w $f801,$ff00
  9164.  dc.w col1,$50
  9165.  dc.w $f901,$ff00
  9166.  dc.w col1,$90
  9167.  dc.w $fa01,$ff00
  9168.  dc.w col1,$f0
  9169.  dc.w $fb01,$ff00
  9170.  dc.w col1,$f0
  9171.  dc.w $fc01,$ff00
  9172.  dc.w col1,$90
  9173.  dc.w $fd01,$ff00
  9174.  dc.w col1,$50
  9175.  
  9176.  dc.w $fe01,$ff00
  9177.  dc.w col1,$fff
  9178.  
  9179.  dc.w $ffdf,$fffe
  9180.  dc.w $a01,$ff00
  9181.  dc.w bplcon0,$201
  9182.  
  9183.  incbin "faces2cols"
  9184.  dc.w bpl1pth
  9185. f1h
  9186.  dc.w 0
  9187.  
  9188.  dc.w bpl1ptl
  9189. f1l
  9190.  dc.w 0
  9191.  
  9192.  dc.w bpl2pth
  9193. f2h
  9194.  dc.w 0
  9195.  
  9196.  dc.w bpl2ptl
  9197. f2l
  9198.  dc.w 0
  9199.  
  9200.  dc.w bpl3pth
  9201. f3h
  9202.  dc.w 0
  9203.  
  9204.  dc.w bpl3ptl
  9205. f3l
  9206.  dc.w 0
  9207.  
  9208.  dc.w bpl4pth
  9209. f4h
  9210.  dc.w 0
  9211.  dc.w bpl4ptl
  9212. f4l
  9213.  dc.w 0
  9214.  
  9215.  dc.w bpl5pth
  9216. f5h
  9217.  dc.w 0
  9218.  dc.w bpl5ptl
  9219. f5l
  9220.  dc.w 0
  9221.  
  9222.  dc.w $0c01,$ff00
  9223.  dc.w bplcon0,$5201
  9224.   
  9225.  dc.w $ffff,$fffe
  9226.  
  9227.  cnop 0,64
  9228. FacePlace:
  9229. ; ds.l 6*32*5
  9230.  
  9231. TEXTSCRN: dc.l 0
  9232.  
  9233. TEXTCOP:
  9234.  dc.w intreq,$8030
  9235.  
  9236.  dc.w spr0ptl
  9237. txs0l:
  9238.  dc.w 0
  9239.  dc.w spr0pth
  9240. txs0h:
  9241.  dc.w 0
  9242.  dc.w spr1ptl
  9243. txs1l:
  9244.  dc.w 0
  9245.  dc.w spr1pth
  9246. txs1h:
  9247.  dc.w 0
  9248.  dc.w spr2ptl
  9249. txs2l:
  9250.  dc.w 0
  9251.  dc.w spr2pth
  9252. txs2h:
  9253.  dc.w 0
  9254.  dc.w spr3ptl
  9255. txs3l:
  9256.  dc.w 0
  9257.  dc.w spr3pth
  9258. txs3h:
  9259.  dc.w 0
  9260.  dc.w spr4ptl
  9261. txs4l:
  9262.  dc.w 0
  9263.  dc.w spr4pth
  9264. txs4h:
  9265.  dc.w 0
  9266.  dc.w spr5ptl
  9267. txs5l:
  9268.  dc.w 0
  9269.  dc.w spr5pth
  9270. txs5h:
  9271.  dc.w 0
  9272.  dc.w spr6ptl
  9273. txs6l:
  9274.  dc.w 0
  9275.  dc.w spr6pth
  9276. txs6h:
  9277.  dc.w 0
  9278.  dc.w spr7ptl
  9279. txs7l:
  9280.  dc.w 0
  9281.  dc.w spr7pth
  9282. txs7h:
  9283.  dc.w 0
  9284.  
  9285.  
  9286.  dc.w $10c,$0088
  9287.  
  9288.  dc.w $1fc,$f
  9289.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9290.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9291.  dc.w ddfstart,$38      ; Data fetch start.
  9292.  dc.w ddfstop,$c8       ; Data fetch stop.
  9293.  
  9294.  dc.w bplcon0
  9295. TSCP:
  9296.  dc.w $9201
  9297.  
  9298.  dc.w $106,$c40
  9299.  
  9300.  dc.w $2a01,$ff00
  9301.  
  9302.  dc.w col0,0
  9303.  dc.w col1
  9304. TOPLET:
  9305. TXTCOLL:
  9306.  dc.w 0
  9307.   dc.w col2
  9308. BOTLET:
  9309.  dc.w 0
  9310.  dc.w col3
  9311. ALLTEXT:
  9312.  dc.w $fff
  9313.  dc.w $106,$e40
  9314.  dc.w col3
  9315. ALLTEXTLOW:
  9316.  dc.w $0
  9317.  
  9318.  
  9319.  dc.w bpl1pth
  9320. TSPTh:
  9321.  dc.w 0
  9322.  dc.w bpl1ptl
  9323. TSPTl:
  9324.  dc.w 0
  9325.  
  9326.  dc.w bpl2pth
  9327. TSPTh2:
  9328.  dc.w 0
  9329.  dc.w bpl2ptl
  9330. TSPTl2:
  9331.  dc.w 0
  9332.  
  9333.  
  9334.  dc.w $108,0
  9335.  dc.w $10a,0
  9336.  
  9337.  dc.w $ffff,$fffe
  9338.  
  9339. ********************************************
  9340. * Stuff you don't have to worry about yet. *
  9341. ********************************************
  9342.  
  9343. closeeverything:
  9344.  
  9345.  jsr mt_end
  9346.  
  9347.  move.l #nullcop,d0
  9348. ; move.l old,d0
  9349.  
  9350.  move.l #$dff000,a6
  9351.  move.l d0,$dff080     ; Restore old copper list.
  9352.  move.w d0,ocl
  9353.  swap d0
  9354.  move.w d0,och
  9355.  
  9356.  move.w #3,d0
  9357. nonewvbl
  9358.  btst #5,intreqrl(a6)
  9359.  beq.s nonewvbl
  9360.  move.w #$20,intreq(a6)
  9361.  dbra d0,nonewvbl
  9362.  
  9363.  move.w #$8020,dmacon(a6)
  9364.  move.w #$f,dmacon(a6)
  9365.  
  9366.  move.l saveit,$6c.w
  9367.  
  9368. ; move.l 4.w,a6
  9369. ; lea VBLANKInt,a1
  9370. ; moveq #5,d0
  9371. ; jsr _LVORemIntServer(a6)
  9372.  
  9373.  IFEQ CD32VER
  9374.  move.l OLDKINT,$68.w
  9375.  ENDC
  9376.  move.w saveinters,d0
  9377.  or.w #$c000,d0
  9378.  move.w d0,intena(a6)
  9379.  clr.w $dff0a8
  9380.  clr.w $dff0b8
  9381.  clr.w $dff0c8
  9382.  clr.w $dff0d8
  9383.  
  9384.  
  9385. ; move.l oldview,a1
  9386. ; move.l a1,d0
  9387. ; move.l gfxbase,a6
  9388. ; jsr -$de(a6)
  9389.  
  9390. ; cmp.b #'s',mors
  9391. ; beq.s leaveold
  9392. ; move.w #$f8e,$dff1dc
  9393. ;leaveold:
  9394.  
  9395.  jsr RELEASELEVELMEM
  9396.  jsr RELEASESCRNMEM
  9397.  
  9398.  move.l #0,d0
  9399.  
  9400.  rts
  9401.  
  9402.  
  9403.  
  9404. intbase: dc.l 0
  9405. gfxbase: dc.l 0
  9406. oldview: dc.l 0
  9407.  
  9408. stuff:
  9409.  
  9410.     PRSDL
  9411.     Lea    gfxname(pc),a1    
  9412.     Moveq.l    #0,d0
  9413.     Move.l    $4.w,a6    
  9414.     Jsr    -$228(a6)
  9415.     add.w d1,RVAL1
  9416.     Move.l     d0,gfxbase
  9417.     Move.l    d0,a6                Use As Base Reg
  9418.     Move.l    34(a6),oldview
  9419.     move.l 38(a6),old
  9420.     rts
  9421.  
  9422. gfxname dc.b "graphics.library",0
  9423.  even
  9424. INTUNAME    dc.b    "intuition.library",0
  9425.  
  9426.  even
  9427.  
  9428.  
  9429.  cnop 0,64
  9430.  
  9431. Panel:
  9432.  dc.l 0
  9433.  
  9434. TimerScr: 
  9435. ;ds.b 40*64
  9436.  
  9437. scrntab:
  9438.  ds.b 16
  9439. val SET 32
  9440.  REPT 96
  9441.  dc.b val,val,val
  9442. val SET val+1
  9443.  ENDR
  9444.  ds.b 16
  9445.  
  9446. smallscrntab:
  9447. val SET 32
  9448.  REPT 96
  9449.  dc.b val,val
  9450. val SET val+1
  9451.  ENDR
  9452.  
  9453.  cnop 0,64
  9454. scrn:
  9455.  
  9456.  dcb.l 8,$33333333
  9457.  dc.l 0
  9458.  dc.l 0
  9459.  
  9460.  dcb.l 8,$0f0f0f0f
  9461.  dc.l 0
  9462.  dc.l 0
  9463.  
  9464.  dcb.l 8,$00ff00ff
  9465.  dc.l 0
  9466.  dc.l 0
  9467.  
  9468.  dcb.l 8,$0000ffff
  9469.  dc.l 0
  9470.  dc.l 0
  9471.  
  9472.  dc.l 0,-1,0,-1,0,-1,0,-1
  9473.  dc.l 0
  9474.  dc.l 0
  9475.  
  9476.  dc.l -1,-1,0,0,-1,-1,0,0
  9477.  dc.l 0
  9478.  dc.l 0
  9479.  
  9480.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9481.  dc.l 0
  9482.  dc.l 0
  9483.  
  9484. NumTimes: dc.l 0
  9485. TimeCount: dc.l 0
  9486. oldtime: dc.l 0
  9487. counting: dc.b 0
  9488. oktodisplay: dc.b 0
  9489.  
  9490. INITTIMER:
  9491.  move.l #0,TimeCount
  9492.  move.l #0,NumTimes
  9493.  rts
  9494.  
  9495. STARTCOUNT:
  9496.  move.l d0,-(a7)
  9497.  move.l $dff004,d0
  9498.  and.l #$1ffff,d0
  9499.  move.l d0,oldtime
  9500.  st counting
  9501.  move.l (a7)+,d0
  9502.  rts
  9503.  
  9504. STOPCOUNT:
  9505.  move.l d0,-(a7)
  9506.  move.l $dff004,d0
  9507.  and.l #$1ffff,d0
  9508.  
  9509.  sub.l oldtime,d0
  9510.  cmp.l #-256,d0
  9511.  bge.s okcount
  9512.  add.l #313*256,d0
  9513. okcount:
  9514.  add.l d0,TimeCount
  9515.  addq.l #1,NumTimes
  9516.  clr.b counting
  9517.  move.l (a7)+,d0
  9518.  rts
  9519.  
  9520. STOPCOUNTNOADD:
  9521.  move.l d0,-(a7)
  9522.  move.l $dff004,d0
  9523.  and.l #$1ffff,d0
  9524.  
  9525.  sub.l oldtime,d0
  9526.  cmp.l #-256,d0
  9527.  bge.s okcount2
  9528.  add.l #313*256,d0
  9529. okcount2:
  9530.  add.l d0,TimeCount
  9531.  clr.b counting
  9532.  move.l (a7)+,d0
  9533.  rts
  9534.  
  9535. maxbot: dc.w 0
  9536. tstneg: dc.l 0
  9537.  
  9538. STOPTIMER:
  9539.  st oktodisplay
  9540.  rts
  9541.  
  9542. digits: incbin "numbers.inc"
  9543.  
  9544.  
  9545.  Section Sounds,CODE_C
  9546.  
  9547. nullcop:
  9548.  dc.w $106,$c40
  9549.  dc.w $180,0 
  9550.  dc.w $100,$0
  9551.  dc.w $ffff,$fffe
  9552.  
  9553. Scream:
  9554. ; incbin "ab3:sounds/Scream"
  9555. ; ds.w 100
  9556. EndScream:
  9557. LowScream:
  9558. ; incbin "ab3:sounds/LowScream"
  9559. ; ds.w 100
  9560. EndLowScream:
  9561. BaddieGun:
  9562. ; incbin "ab3:sounds/BaddieGun"
  9563. EndBaddieGun:
  9564. bass:
  9565. ; incbin "ab3:sounds/backbass+drum"
  9566. bassend:
  9567. Shoot:
  9568. ; incbin "ab3:sounds/fire!"
  9569. EndShoot:
  9570. Munch:
  9571. ; incbin "ab3:sounds/munch"
  9572. EndMunch:
  9573. PooGun:
  9574. ; incbin "ab3:sounds/shoot.dm"
  9575. EndPooGun:
  9576. Collect:
  9577. ; incbin "ab3:sounds/collect"
  9578. EndCollect:
  9579. DoorNoise:
  9580. ; incbin "ab3:sounds/newdoor"
  9581. EndDoorNoise:
  9582. Stomp:
  9583. ; incbin "ab3:sounds/footstep3"
  9584. EndStomp:
  9585. SwitchNoise:
  9586. ; incbin "ab3:sounds/switch"
  9587. EndSwitch:
  9588. Reload:
  9589. ; incbin "ab3:sounds/switch1.SFX"
  9590. EndReload:
  9591. NoAmmo:
  9592. ; incbin "ab3:sounds/noammo"
  9593. EndNoAmmo:
  9594. Splotch:
  9595. ; incbin "ab3:sounds/splotch"
  9596. EndSplotch:
  9597. SplatPop:
  9598. ; incbin "ab3:sounds/splatpop"
  9599. EndSplatPop:
  9600. Boom:
  9601. ; incbin "ab3:sounds/boom"
  9602. EndBoom:
  9603. Hiss:
  9604. ; incbin "ab3:sounds/newhiss"
  9605. EndHiss:
  9606. Howl1:
  9607. ; incbin "ab3:sounds/howl1"
  9608. EndHowl1:
  9609. Howl2:
  9610. ; incbin "ab3:sounds/howl2"
  9611. EndHowl2:
  9612. Pant:
  9613. ; incbin "ab3:sounds/pant"
  9614. EndPant:
  9615. Whoosh:
  9616. ; incbin "ab3:sounds/whoosh"
  9617. EndWhoosh:
  9618. ROAR:
  9619. ; incbin "ab3:sounds/bigscream"
  9620. EndROAR
  9621. whoosh:
  9622. ; incbin "ab3:sounds/flame"
  9623. Endwhoosh:
  9624.  SECTION music,code_c
  9625.  
  9626. UseAllChannels: dc.w 0
  9627.  
  9628. mt_init:move.l    mt_data,a0
  9629.     move.l    a0,a1
  9630.     add.l    #$3b8,a1
  9631.     moveq    #$7f,d0
  9632.     moveq    #0,d1
  9633. mt_loop:move.l    d1,d2
  9634.     subq.w    #1,d0
  9635. mt_lop2:move.b    (a1)+,d1
  9636.     cmp.b    d2,d1
  9637.     bgt.s    mt_loop
  9638.     dbf    d0,mt_lop2
  9639.     addq.b    #1,d2
  9640.  
  9641.     lea    mt_samplestarts(pc),a1
  9642.     asl.l    #8,d2
  9643.     asl.l    #2,d2
  9644.     add.l    #$43c,d2
  9645.     add.l    a0,d2
  9646.     move.l    d2,a2
  9647.     moveq    #$1e,d0
  9648. mt_lop3:clr.l    (a2)
  9649.     move.l    a2,(a1)+
  9650.     moveq    #0,d1
  9651.     move.w    42(a0),d1
  9652.     asl.l    #1,d1
  9653.     add.l    d1,a2
  9654.     add.l    #$1e,a0
  9655.     dbf    d0,mt_lop3
  9656.  
  9657.     or.b    #$2,$bfe001
  9658.     move.b    #$6,mt_speed
  9659.     clr.w    $dff0a8
  9660.     clr.w    $dff0b8
  9661.     clr.w    $dff0c8
  9662.     clr.w    $dff0d8
  9663.     clr.b    mt_songpos
  9664.     clr.b    mt_counter
  9665.     clr.w    mt_pattpos
  9666.     rts
  9667.  
  9668. mt_end:    clr.w    $dff0a8
  9669.     clr.w    $dff0b8
  9670.     clr.w    $dff0c8
  9671.     clr.w    $dff0d8
  9672.     move.w    #$f,$dff096
  9673.     rts
  9674.  
  9675. mt_music:
  9676.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9677.     move.l    mt_data,a0
  9678.     addq.b    #$1,mt_counter
  9679.     move.b    mt_counter,D0
  9680.     cmp.b    mt_speed,D0
  9681.     blt.s    mt_nonew
  9682.     clr.b    mt_counter
  9683.     bra    mt_getnew
  9684.  
  9685. mt_nonew:
  9686.     lea    mt_voice1(pc),a6
  9687.     lea    $dff0a0,a5
  9688.     bsr    mt_checkcom
  9689.     lea    mt_voice2(pc),a6
  9690.     lea    $dff0b0,a5
  9691.     bsr    mt_checkcom
  9692.     tst.b UseAllChannels
  9693.     beq mt_endr
  9694.      lea    mt_voice3(pc),a6
  9695.     lea    $dff0c0,a5
  9696.     bsr    mt_checkcom
  9697.     lea    mt_voice4(pc),a6
  9698.     lea    $dff0d0,a5
  9699.     bsr    mt_checkcom
  9700.     bra    mt_endr
  9701.  
  9702. mt_arpeggio:
  9703.     moveq    #0,d0
  9704.     move.b    mt_counter,d0
  9705.     divs    #$3,d0
  9706.     swap    d0
  9707.     cmp.w    #$0,d0
  9708.     beq.s    mt_arp2
  9709.     cmp.w    #$2,d0
  9710.     beq.s    mt_arp1
  9711.  
  9712.     moveq    #0,d0
  9713.     move.b    $3(a6),d0
  9714.     lsr.b    #4,d0
  9715.     bra.s    mt_arp3
  9716. mt_arp1:moveq    #0,d0
  9717.     move.b    $3(a6),d0
  9718.     and.b    #$f,d0
  9719.     bra.s    mt_arp3
  9720. mt_arp2:move.w    $10(a6),d2
  9721.     bra.s    mt_arp4
  9722. mt_arp3:asl.w    #1,d0
  9723.     moveq    #0,d1
  9724.     move.w    $10(a6),d1
  9725.     lea    mt_periods(pc),a0
  9726.     moveq    #$24,d7
  9727. mt_arploop:
  9728.     move.w    (a0,d0.w),d2
  9729.     cmp.w    (a0),d1
  9730.     bge.s    mt_arp4
  9731.     addq.l    #2,a0
  9732.     dbf    d7,mt_arploop
  9733.     rts
  9734. mt_arp4:move.w    d2,$6(a5)
  9735.     rts
  9736.  
  9737. mt_getnew:
  9738.     move.l    mt_data,a0
  9739.     move.l    a0,a3
  9740.     move.l    a0,a2
  9741.     add.l    #$c,a3
  9742.     add.l    #$3b8,a2
  9743.     add.l    #$43c,a0
  9744.  
  9745.     moveq    #0,d0
  9746.     move.l    d0,d1
  9747.     move.b    mt_songpos,d0
  9748.     move.b    (a2,d0.w),d1
  9749.     asl.l    #8,d1
  9750.     asl.l    #2,d1
  9751.     add.w    mt_pattpos,d1
  9752.     clr.w    mt_dmacon
  9753.  
  9754.     lea    $dff0a0,a5
  9755.     lea    mt_voice1(pc),a6
  9756.     bsr    mt_playvoice
  9757.     lea    $dff0b0,a5
  9758.     lea    mt_voice2(pc),a6
  9759.     bsr    mt_playvoice
  9760.     tst.b UseAllChannels
  9761.     beq mt_setdma
  9762.     lea    $dff0c0,a5
  9763.     lea    mt_voice3(pc),a6
  9764.     bsr    mt_playvoice
  9765.     lea    $dff0d0,a5
  9766.     lea    mt_voice4(pc),a6
  9767.     bsr    mt_playvoice
  9768.     bra    mt_setdma
  9769.  
  9770. PROTCALC:
  9771. ;    include "ab3:source/protcalc.s"
  9772.     incbin "ab3:includes/protcalc.bin"
  9773. ENDPROTCALC:
  9774.  
  9775. mt_playvoice:
  9776.     move.l    (a0,d1.l),(a6)
  9777.     addq.l    #4,d1
  9778.     moveq    #0,d2
  9779.     move.b    $2(a6),d2
  9780.     and.b    #$f0,d2
  9781.     lsr.b    #4,d2
  9782.     move.b    (a6),d0
  9783.     and.b    #$f0,d0
  9784.     or.b    d0,d2
  9785.     tst.b    d2
  9786.     beq.s    mt_setregs
  9787.     moveq    #0,d3
  9788.     lea    mt_samplestarts(pc),a1
  9789.     move.l    d2,d4
  9790.     subq.l    #$1,d2
  9791.     asl.l    #2,d2
  9792.     mulu    #$1e,d4
  9793.     move.l    (a1,d2.l),$4(a6)
  9794.     move.w    (a3,d4.l),$8(a6)
  9795.     move.w    $2(a3,d4.l),$12(a6)
  9796.     move.w    $4(a3,d4.l),d3
  9797.     tst.w    d3
  9798.     beq.s    mt_noloop
  9799.     move.l    $4(a6),d2
  9800.     asl.w    #1,d3
  9801.     add.l    d3,d2
  9802.     move.l    d2,$a(a6)
  9803.     move.w    $4(a3,d4.l),d0
  9804.     add.w    $6(a3,d4.l),d0
  9805.     move.w    d0,8(a6)
  9806.     move.w    $6(a3,d4.l),$e(a6)
  9807.     move.w    $12(a6),d0
  9808.     asr.w #2,d0
  9809.     move.w d0,$8(a5)
  9810.     bra.s    mt_setregs
  9811. mt_noloop:
  9812.     move.l    $4(a6),d2
  9813.     add.l    d3,d2
  9814.     move.l    d2,$a(a6)
  9815.     move.w    $6(a3,d4.l),$e(a6)
  9816.     move.w    $12(a6),d0
  9817.     asr.w #2,d0
  9818.     move.w d0,$8(a5)
  9819. mt_setregs:
  9820.     move.w    (a6),d0
  9821.     and.w    #$fff,d0
  9822.     beq    mt_checkcom2
  9823.     move.b    $2(a6),d0
  9824.     and.b    #$F,d0
  9825.     cmp.b    #$3,d0
  9826.     bne.s    mt_setperiod
  9827.     bsr    mt_setmyport
  9828.     bra    mt_checkcom2
  9829. mt_setperiod:
  9830.     move.w    (a6),$10(a6)
  9831.     and.w    #$fff,$10(a6)
  9832.     move.w    $14(a6),d0
  9833.     move.w    d0,$dff096
  9834.     clr.b    $1b(a6)
  9835.  
  9836.     move.l    $4(a6),(a5)
  9837.     move.w    $8(a6),$4(a5)
  9838.     move.w    $10(a6),d0
  9839.     and.w    #$fff,d0
  9840.     move.w    d0,$6(a5)
  9841.     move.w    $14(a6),d0
  9842.     or.w    d0,mt_dmacon
  9843.     bra    mt_checkcom2
  9844.  
  9845. mt_setdma:
  9846.      move.w #250,d0
  9847. mt_wait:
  9848.      add.w #1,testchip
  9849.      dbra d0,mt_wait
  9850.     move.w    mt_dmacon,d0
  9851.     or.w    #$8000,d0
  9852.     and.w #%1111111111110011,d0
  9853.     move.w    d0,$dff096
  9854.     move.w #250,d0
  9855. mt_wait2:
  9856.     add.w #1,testchip
  9857.     dbra    d0,mt_wait2
  9858.     lea    $dff000,a5
  9859.     tst.b UseAllChannels
  9860.     beq.s noall
  9861.     lea    mt_voice4(pc),a6
  9862.     move.l    $a(a6),$d0(a5)
  9863.     move.w    $e(a6),$d4(a5)
  9864.     lea    mt_voice3(pc),a6
  9865.     move.l    $a(a6),$c0(a5)
  9866.     move.w    $e(a6),$c4(a5)
  9867. noall:
  9868.     lea    mt_voice2(pc),a6
  9869.     move.l    $a(a6),$b0(a5)
  9870.     move.w    $e(a6),$b4(a5)
  9871.     lea    mt_voice1(pc),a6
  9872.     move.l    $a(a6),$a0(a5)
  9873.     move.w    $e(a6),$a4(a5)
  9874.  
  9875.     add.w    #$10,mt_pattpos
  9876.     cmp.w    #$400,mt_pattpos
  9877.     bne.s    mt_endr
  9878. mt_nex:    clr.w    mt_pattpos
  9879.     clr.b    mt_break
  9880.     addq.b    #1,mt_songpos
  9881.     and.b    #$7f,mt_songpos
  9882.     move.b    mt_songpos,d1
  9883. ;    cmp.b    mt_data+$3b6,d1
  9884. ;    bne.s    mt_endr
  9885. ;    move.b    mt_data+$3b7,mt_songpos
  9886. mt_endr:tst.b    mt_break
  9887.     bne.s    mt_nex
  9888.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  9889.     rts
  9890.  
  9891. mt_setmyport:
  9892.     move.w    (a6),d2
  9893.     and.w    #$fff,d2
  9894.     move.w    d2,$18(a6)
  9895.     move.w    $10(a6),d0
  9896.     clr.b    $16(a6)
  9897.     cmp.w    d0,d2
  9898.     beq.s    mt_clrport
  9899.     bge.s    mt_rt
  9900.     move.b    #$1,$16(a6)
  9901.     rts
  9902. mt_clrport:
  9903.     clr.w    $18(a6)
  9904. mt_rt:    rts
  9905.  
  9906. CODESTORE: dc.l 0
  9907.  
  9908. mt_myport:
  9909.     move.b    $3(a6),d0
  9910.     beq.s    mt_myslide
  9911.     move.b    d0,$17(a6)
  9912.     clr.b    $3(a6)
  9913. mt_myslide:
  9914.     tst.w    $18(a6)
  9915.     beq.s    mt_rt
  9916.     moveq    #0,d0
  9917.     move.b    $17(a6),d0
  9918.     tst.b    $16(a6)
  9919.     bne.s    mt_mysub
  9920.     add.w    d0,$10(a6)
  9921.     move.w    $18(a6),d0
  9922.     cmp.w    $10(a6),d0
  9923.     bgt.s    mt_myok
  9924.     move.w    $18(a6),$10(a6)
  9925.     clr.w    $18(a6)
  9926. mt_myok:move.w    $10(a6),$6(a5)
  9927.     rts
  9928. mt_mysub:
  9929.     sub.w    d0,$10(a6)
  9930.     move.w    $18(a6),d0
  9931.     cmp.w    $10(a6),d0
  9932.     blt.s    mt_myok
  9933.     move.w    $18(a6),$10(a6)
  9934.     clr.w    $18(a6)
  9935.     move.w    $10(a6),$6(a5)
  9936.     rts
  9937.  
  9938. mt_vib:    move.b    $3(a6),d0
  9939.     beq.s    mt_vi
  9940.     move.b    d0,$1a(a6)
  9941.  
  9942. mt_vi:    move.b    $1b(a6),d0
  9943.     lea    mt_sin(pc),a4
  9944.     lsr.w    #$2,d0
  9945.     and.w    #$1f,d0
  9946.     moveq    #0,d2
  9947.     move.b    (a4,d0.w),d2
  9948.     move.b    $1a(a6),d0
  9949.     and.w    #$f,d0
  9950.     mulu    d0,d2
  9951.     lsr.w    #$6,d2
  9952.     move.w    $10(a6),d0
  9953.     tst.b    $1b(a6)
  9954.     bmi.s    mt_vibmin
  9955.     add.w    d2,d0
  9956.     bra.s    mt_vib2
  9957. mt_vibmin:
  9958.     sub.w    d2,d0
  9959. mt_vib2:move.w    d0,$6(a5)
  9960.     move.b    $1a(a6),d0
  9961.     lsr.w    #$2,d0
  9962.     and.w    #$3c,d0
  9963.     add.b    d0,$1b(a6)
  9964.     rts
  9965.  
  9966. mt_nop:    move.w    $10(a6),$6(a5)
  9967.     rts
  9968.  
  9969.  
  9970. mt_checkcom:
  9971.     move.w    $2(a6),d0
  9972.     and.w    #$fff,d0
  9973.     beq.s    mt_nop
  9974.     move.b    $2(a6),d0
  9975.     and.b    #$f,d0
  9976.     tst.b    d0
  9977.     beq    mt_arpeggio
  9978.     cmp.b    #$1,d0
  9979.     beq.s    mt_portup
  9980.     cmp.b    #$2,d0
  9981.     beq    mt_portdown
  9982.     cmp.b    #$3,d0
  9983.     beq    mt_myport
  9984.     cmp.b    #$4,d0
  9985.     beq    mt_vib
  9986.     move.w    $10(a6),$6(a5)
  9987.     cmp.b    #$a,d0
  9988.     beq.s    mt_volslide
  9989.     rts
  9990.  
  9991. mt_volslide:
  9992.     moveq    #0,d0
  9993.     move.b    $3(a6),d0
  9994.     lsr.b    #4,d0
  9995.     tst.b    d0
  9996.     beq.s    mt_voldown
  9997.     add.w    d0,$12(a6)
  9998.     cmp.w    #$40,$12(a6)
  9999.     bmi.s    mt_vol2
  10000.     move.w    #$40,$12(a6)
  10001. mt_vol2:move.w    $12(a6),d0
  10002.     asr.w #2,d0
  10003.     move.w d0,$8(a5)
  10004.     rts
  10005.  
  10006. mt_voldown:
  10007.     moveq    #0,d0
  10008.     move.b    $3(a6),d0
  10009.     and.b    #$f,d0
  10010.     sub.w    d0,$12(a6)
  10011.     bpl.s    mt_vol3
  10012.     clr.w    $12(a6)
  10013. mt_vol3:move.w    $12(a6),d0
  10014.     asr.w #2,d0
  10015.     move.w d0,$8(a5)
  10016.     rts
  10017.  
  10018. mt_portup:
  10019.     moveq    #0,d0
  10020.     move.b    $3(a6),d0
  10021.     sub.w    d0,$10(a6)
  10022.     move.w    $10(a6),d0
  10023.     and.w    #$fff,d0
  10024.     cmp.w    #$71,d0
  10025.     bpl.s    mt_por2
  10026.     and.w    #$f000,$10(a6)
  10027.     or.w    #$71,$10(a6)
  10028. mt_por2:move.w    $10(a6),d0
  10029.     and.w    #$fff,d0
  10030.     move.w    d0,$6(a5)
  10031.     rts
  10032.  
  10033. mt_portdown:
  10034.     clr.w    d0
  10035.     move.b    $3(a6),d0
  10036.     add.w    d0,$10(a6)
  10037.     move.w    $10(a6),d0
  10038.     and.w    #$fff,d0
  10039.     cmp.w    #$358,d0
  10040.     bmi.s    mt_por3
  10041.     and.w    #$f000,$10(a6)
  10042.     or.w    #$358,$10(a6)
  10043. mt_por3:move.w    $10(a6),d0
  10044.     and.w    #$fff,d0
  10045.     move.w    d0,$6(a5)
  10046.     rts
  10047.  
  10048. mt_checkcom2:
  10049.     move.b    $2(a6),d0
  10050.     and.b    #$f,d0
  10051.     cmp.b    #$e,d0
  10052.     beq.s    mt_setfilt
  10053.     cmp.b    #$d,d0
  10054.     beq.s    mt_pattbreak
  10055.     cmp.b    #$b,d0
  10056.     beq.s    mt_posjmp
  10057.     cmp.b    #$c,d0
  10058.     beq.s    mt_setvol
  10059.     cmp.b    #$f,d0
  10060.     beq.s    mt_setspeed
  10061.     rts
  10062.  
  10063. mt_setfilt:
  10064.     move.b    $3(a6),d0
  10065.     and.b    #$1,d0
  10066.     asl.b    #$1,d0
  10067.     and.b    #$fd,$bfe001
  10068.     or.b    d0,$bfe001
  10069.     rts
  10070. mt_pattbreak:
  10071.     not.b    mt_break
  10072.     rts
  10073. mt_posjmp:
  10074.     st reachedend
  10075.     move.b    $3(a6),d0
  10076.     subq.b    #$1,d0
  10077.     move.b    d0,mt_songpos
  10078.     not.b    mt_break
  10079.     rts
  10080. mt_setvol:
  10081.     cmp.b    #$40,$3(a6)
  10082.     ble.s    mt_vol4
  10083.     move.b    #$40,$3(a6)
  10084. mt_vol4:move.b    $3(a6),d0
  10085.     asr.w #2,d0
  10086.     move.w d0,$8(a5)
  10087.     rts
  10088. mt_setspeed:
  10089.     cmp.b    #$1f,$3(a6)
  10090.     ble.s    mt_sets
  10091.     move.b    #$1f,$3(a6)
  10092. mt_sets:move.b    $3(a6),d0
  10093.     beq.s    mt_rts2
  10094.     move.b    d0,mt_speed
  10095.     clr.b    mt_counter
  10096. mt_rts2:rts
  10097.  
  10098. mt_sin:
  10099.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10100.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10101.  
  10102. mt_periods:
  10103.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10104.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10105.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10106.  DC.w $007f,$0078,$0071,$0000,$0000
  10107.  
  10108. reachedend: dc.b 0
  10109. mt_speed:    DC.b    6
  10110. mt_songpos:    DC.b    0
  10111. mt_pattpos:    DC.w    0
  10112. mt_counter:    DC.b    0
  10113.  
  10114. mt_break:    DC.b    0
  10115. mt_dmacon:    DC.w    0
  10116. mt_samplestarts:DS.L    $1f
  10117. mt_voice1:    DS.w    10
  10118.         DC.w    1
  10119.         DS.w    3
  10120. mt_voice2:    DS.w    10
  10121.         DC.w    2
  10122.         DS.w    3
  10123. mt_voice3:    DS.w    10
  10124.         DC.w    4
  10125.         DS.w    3
  10126. mt_voice4:    DS.w    10
  10127.         DC.w    8
  10128.         DS.w    3
  10129.  
  10130. testchip: dc.w 0
  10131.  
  10132. ;/* End of File */
  10133. mt_data: dc.l 0
  10134. tstchip: dc.l 0
  10135.  include "SERIAL_NIGHTMARE"
  10136.  
  10137. ingame:
  10138. ; incbin "ab3:includes/ingame"
  10139. gameover: incbin "ab3:includes/gameover"
  10140. welldone: incbin "ab3:includes/welldone"
  10141.